<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Doxygen: recognition/include/pcl/recognition/impl/implicit_shape_model.hpp 源文件</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Doxygen
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','搜索');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('implicit__shape__model_8hpp_source.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">implicit_shape_model.hpp</div>  </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Software License Agreement (BSD License)</span></div>
<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> *  Copyright (c) 2011, Willow Garage, Inc.</span></div>
<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> *  All rights reserved.</span></div>
<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *  Redistribution and use in source and binary forms, with or without</span></div>
<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *  modification, are permitted provided that the following conditions</span></div>
<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *  are met:</span></div>
<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *   * Redistributions of source code must retain the above copyright</span></div>
<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> *     notice, this list of conditions and the following disclaimer.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> *   * Redistributions in binary form must reproduce the above</span></div>
<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> *     copyright notice, this list of conditions and the following</span></div>
<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> *     disclaimer in the documentation and/or other materials provided</span></div>
<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> *     with the distribution.</span></div>
<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> *   * Neither the name of Willow Garage, Inc. nor the names of its</span></div>
<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> *     contributors may be used to endorse or promote products derived</span></div>
<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> *     from this software without specific prior written permission.</span></div>
<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div>
<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> *  &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div>
<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS</span></div>
<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE</span></div>
<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,</span></div>
<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,</span></div>
<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment"> *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER</span></div>
<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"> *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span></div>
<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment"> *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN</span></div>
<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment"> *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE</span></div>
<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"> *  POSSIBILITY OF SUCH DAMAGE.</span></div>
<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment"> * Implementation of the ISM algorithm described in &quot;Hough Transforms and 3D SURF for robust three dimensional classication&quot;</span></div>
<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment"> * by Jan Knopp, Mukta Prasad, Geert Willems, Radu Timofte, and Luc Van Gool</span></div>
<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment"> * Authors: Roman Shapovalov, Alexander Velizhev, Sergey Ushakov</span></div>
<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">#ifndef PCL_IMPLICIT_SHAPE_MODEL_HPP_</span></div>
<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="preprocessor">#define PCL_IMPLICIT_SHAPE_MODEL_HPP_</span></div>
<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="preprocessor">#include &quot;../implicit_shape_model.h&quot;</span></div>
<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Po<span class="keywordtype">int</span>T&gt;</div>
<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classpcl_1_1features_1_1_i_s_m_vote_list.html#aeefba7e2950f49b5923e4d76962c6f10">   48</a></span>&#160;<a class="code" href="classpcl_1_1features_1_1_i_s_m_vote_list.html#aeefba7e2950f49b5923e4d76962c6f10">pcl::features::ISMVoteList&lt;PointT&gt;::ISMVoteList</a> () :</div>
<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;  votes_ (new pcl::<a class="code" href="classpcl_1_1_point_cloud.html">PointCloud</a>&lt;pcl::<a class="code" href="structpcl_1_1_interest_point.html">InterestPoint</a>&gt; ()),</div>
<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;  tree_is_valid_ (false),</div>
<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;  votes_origins_ (new pcl::<a class="code" href="classpcl_1_1_point_cloud.html">PointCloud</a>&lt;<a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>&gt; ()),</div>
<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;  votes_class_ (0),</div>
<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;  tree_ (),</div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;  k_ind_ (0),</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;  k_sqr_dist_ (0)</div>
<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;{</div>
<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;}</div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Po<span class="keywordtype">int</span>T&gt;</div>
<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classpcl_1_1features_1_1_i_s_m_vote_list.html#aecd4e03778ec4df656e9a1b410ae905c">   61</a></span>&#160;<a class="code" href="classpcl_1_1features_1_1_i_s_m_vote_list.html#aecd4e03778ec4df656e9a1b410ae905c">pcl::features::ISMVoteList&lt;PointT&gt;::~ISMVoteList</a> ()</div>
<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;{</div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;  votes_class_.clear ();</div>
<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;  votes_origins_.reset ();</div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;  votes_.reset ();</div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  k_ind_.clear ();</div>
<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;  k_sqr_dist_.clear ();</div>
<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;  tree_.reset ();</div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;}</div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160; </div>
<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Po<span class="keywordtype">int</span>T&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classpcl_1_1features_1_1_i_s_m_vote_list.html#a224bb7843bc1493b510b53884ac1b71c">   73</a></span>&#160;<a class="code" href="classpcl_1_1features_1_1_i_s_m_vote_list.html#a224bb7843bc1493b510b53884ac1b71c">pcl::features::ISMVoteList&lt;PointT&gt;::addVote</a> (</div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    <a class="code" href="structpcl_1_1_interest_point.html">pcl::InterestPoint</a>&amp; vote, <span class="keyword">const</span> <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;vote_origin, <span class="keywordtype">int</span> votes_class)</div>
<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;{</div>
<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;  tree_is_valid_ = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;  votes_-&gt;points.insert (votes_-&gt;points.end (), vote);<span class="comment">// TODO: adjust height and width</span></div>
<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160; </div>
<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;  votes_origins_-&gt;points.push_back (vote_origin);</div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;  votes_class_.push_back (votes_class);</div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;}</div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160; </div>
<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Po<span class="keywordtype">int</span>T&gt; <span class="keyword">typename</span> pcl::PointCloud&lt;pcl::PointXYZRGB&gt;::Ptr</div>
<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classpcl_1_1features_1_1_i_s_m_vote_list.html#a8af69407ed99f978fc73b245d2540c6b">   85</a></span>&#160;<a class="code" href="classpcl_1_1features_1_1_i_s_m_vote_list.html#a8af69407ed99f978fc73b245d2540c6b">pcl::features::ISMVoteList&lt;PointT&gt;::getColoredCloud</a> (<span class="keyword">typename</span> pcl::PointCloud&lt;PointT&gt;::Ptr cloud)</div>
<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;{</div>
<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;  <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b.html">pcl::PointXYZRGB</a> point;</div>
<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;  pcl::PointCloud&lt;pcl::PointXYZRGB&gt;::Ptr colored_cloud = (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;pcl::PointXYZRGB&gt;</a>)-&gt;makeShared ();</div>
<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;  colored_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> = 0;</div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  colored_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> = 1;</div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160; </div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;  <span class="keywordflow">if</span> (cloud != 0)</div>
<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;  {</div>
<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    colored_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> += <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span> (cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ());</div>
<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    point.r = 255;</div>
<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    point.g = 255;</div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    point.b = 255;</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i_point = 0; i_point &lt; cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (); i_point++)</div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    {</div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;      point.x = cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i_point].x;</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;      point.y = cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i_point].y;</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;      point.z = cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i_point].z;</div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;      colored_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.push_back (point);</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    }</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;  }</div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160; </div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;  point.r = 0;</div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;  point.g = 0;</div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;  point.b = 255;</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i_vote = 0; i_vote &lt; votes_-&gt;points.size (); i_vote++)</div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;  {</div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    point.x = votes_-&gt;points[i_vote].x;</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    point.y = votes_-&gt;points[i_vote].y;</div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    point.z = votes_-&gt;points[i_vote].z;</div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    colored_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.push_back (point);</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;  }</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;  colored_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> += <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span> (votes_-&gt;points.size ());</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160; </div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;  <span class="keywordflow">return</span> (colored_cloud);</div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;}</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160; </div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Po<span class="keywordtype">int</span>T&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classpcl_1_1features_1_1_i_s_m_vote_list.html#a2b1a5eb2c233baa767d1eb8becae92c4">  124</a></span>&#160;<a class="code" href="classpcl_1_1features_1_1_i_s_m_vote_list.html#a2b1a5eb2c233baa767d1eb8becae92c4">pcl::features::ISMVoteList&lt;PointT&gt;::findStrongestPeaks</a> (</div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;  std::vector&lt;<a class="code" href="structpcl_1_1_i_s_m_peak.html">pcl::ISMPeak</a>, Eigen::aligned_allocator&lt;pcl::ISMPeak&gt; &gt; &amp;out_peaks,</div>
<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;  <span class="keywordtype">int</span> in_class_id,</div>
<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;  <span class="keywordtype">double</span> in_non_maxima_radius,</div>
<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;  <span class="keywordtype">double</span> in_sigma)</div>
<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;{</div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;  validateTree ();</div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160; </div>
<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">size_t</span> n_vote_classes = votes_class_.size ();</div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;  <span class="keywordflow">if</span> (n_vote_classes == 0)</div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; n_vote_classes ; i++)</div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    assert ( votes_class_[i] == in_class_id );</div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160; </div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;  <span class="comment">// heuristic: start from NUM_INIT_PTS different locations selected uniformly</span></div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;  <span class="comment">// on the votes. Intuitively, it is likely to get a good location in dense regions.</span></div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> NUM_INIT_PTS = 100;</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;  <span class="keywordtype">double</span> SIGMA_DIST = in_sigma;<span class="comment">// rule of thumb: 10% of the object radius</span></div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">double</span> FINAL_EPS = SIGMA_DIST / 100;<span class="comment">// another heuristic</span></div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160; </div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;  std::vector&lt;Eigen::Vector3f, Eigen::aligned_allocator&lt;Eigen::Vector3f&gt; &gt; peaks (NUM_INIT_PTS);</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;  std::vector&lt;double&gt; peak_densities (NUM_INIT_PTS);</div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;  <span class="keywordtype">double</span> max_density = -1.0;</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; NUM_INIT_PTS; i++)</div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;  {</div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    Eigen::Vector3f old_center;</div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    Eigen::Vector3f curr_center;</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    curr_center (0) = votes_-&gt;points[votes_-&gt;points.size () * i / NUM_INIT_PTS].x;</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    curr_center (1) = votes_-&gt;points[votes_-&gt;points.size () * i / NUM_INIT_PTS].y;</div>
<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    curr_center (2) = votes_-&gt;points[votes_-&gt;points.size () * i / NUM_INIT_PTS].z;</div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160; </div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    <span class="keywordflow">do</span></div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    {</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;      old_center = curr_center;</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;      curr_center = shiftMean (old_center, SIGMA_DIST);</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    } <span class="keywordflow">while</span> ((old_center - curr_center).norm () &gt; FINAL_EPS);</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160; </div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    <a class="code" href="structpcl_1_1_point_x_y_z.html">pcl::PointXYZ</a> point;</div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    point.x = curr_center (0);</div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    point.y = curr_center (1);</div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    point.z = curr_center (2);</div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    <span class="keywordtype">double</span> curr_density = getDensityAtPoint (point, SIGMA_DIST);</div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    assert (curr_density &gt;= 0.0);</div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160; </div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    peaks[i] = curr_center;</div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    peak_densities[i] = curr_density;</div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160; </div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    <span class="keywordflow">if</span> ( max_density &lt; curr_density )</div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;      max_density = curr_density;</div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;  }</div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160; </div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;  <span class="comment">//extract peaks</span></div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;  std::vector&lt;bool&gt; peak_flag (NUM_INIT_PTS, <span class="keyword">true</span>);</div>
<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_peak = 0; i_peak &lt; NUM_INIT_PTS; i_peak++)</div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;  {</div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    <span class="comment">// find best peak with taking into consideration peak flags</span></div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    <span class="keywordtype">double</span> best_density = -1.0;</div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    Eigen::Vector3f strongest_peak;</div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    <span class="keywordtype">int</span> best_peak_ind (-1);</div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    <span class="keywordtype">int</span> peak_counter (0);</div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; NUM_INIT_PTS; i++)</div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    {</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;      <span class="keywordflow">if</span> ( !peak_flag[i] )</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160; </div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;      <span class="keywordflow">if</span> ( peak_densities[i] &gt; best_density)</div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;      {</div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;        best_density = peak_densities[i];</div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;        strongest_peak = peaks[i];</div>
<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;        best_peak_ind = i;</div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;      }</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;      ++peak_counter;</div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    }</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160; </div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;    <span class="keywordflow">if</span>( peak_counter == 0 )</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;      <span class="keywordflow">break</span>;<span class="comment">// no peaks</span></div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160; </div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    <a class="code" href="structpcl_1_1_i_s_m_peak.html">pcl::ISMPeak</a> peak;</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    peak.x = strongest_peak(0);</div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    peak.y = strongest_peak(1);</div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    peak.z = strongest_peak(2);</div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    peak.<a class="code" href="structpcl_1_1_i_s_m_peak.html#ab396d6f73ad331b39585bc37f481230b">density</a> = best_density;</div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    peak.<a class="code" href="structpcl_1_1_i_s_m_peak.html#ab5ade3a0df41fe9043dd86751a17dbf9">class_id</a> = in_class_id;</div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    out_peaks.push_back ( peak );</div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160; </div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    <span class="comment">// mark best peaks and all its neighbors</span></div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    peak_flag[best_peak_ind] = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; NUM_INIT_PTS; i++)</div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    {</div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;      <span class="comment">// compute distance between best peak and all unmarked peaks</span></div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;      <span class="keywordflow">if</span> ( !peak_flag[i] )</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160; </div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;      <span class="keywordtype">double</span> dist = (strongest_peak - peaks[i]).norm ();</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;      <span class="keywordflow">if</span> ( dist &lt; in_non_maxima_radius )</div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;        peak_flag[i] = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    }</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;  }</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;}</div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160; </div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Po<span class="keywordtype">int</span>T&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00226"></a><span class="lineno"><a class="line" href="classpcl_1_1features_1_1_i_s_m_vote_list.html#ab49403392d4d4a0384c2a1c76d097b8b">  226</a></span>&#160;<a class="code" href="classpcl_1_1features_1_1_i_s_m_vote_list.html#ab49403392d4d4a0384c2a1c76d097b8b">pcl::features::ISMVoteList&lt;PointT&gt;::validateTree</a> ()</div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;{</div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;  <span class="keywordflow">if</span> (!tree_is_valid_)</div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;  {</div>
<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    <span class="keywordflow">if</span> (tree_ == 0)</div>
<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;      tree_ = boost::shared_ptr&lt;pcl::KdTreeFLANN&lt;pcl::InterestPoint&gt; &gt; (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_kd_tree_f_l_a_n_n.html">pcl::KdTreeFLANN&lt;pcl::InterestPoint&gt;</a> ());</div>
<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    tree_-&gt;setInputCloud (votes_);</div>
<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    k_ind_.resize ( votes_-&gt;points.size (), -1 );</div>
<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    k_sqr_dist_.resize ( votes_-&gt;points.size (), 0.0f );</div>
<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    tree_is_valid_ = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;  }</div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;}</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160; </div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Po<span class="keywordtype">int</span>T&gt; Eigen::Vector3f</div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;<a class="code" href="classpcl_1_1features_1_1_i_s_m_vote_list.html">pcl::features::ISMVoteList&lt;PointT&gt;::shiftMean</a> (<span class="keyword">const</span> Eigen::Vector3f&amp; snap_pt, <span class="keyword">const</span> <span class="keywordtype">double</span> in_sigma_dist)</div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;{</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;  validateTree ();</div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160; </div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;  Eigen::Vector3f wgh_sum (0.0, 0.0, 0.0);</div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;  <span class="keywordtype">double</span> denom = 0.0;</div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160; </div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;  <a class="code" href="structpcl_1_1_interest_point.html">pcl::InterestPoint</a> pt;</div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;  pt.x = snap_pt[0];</div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;  pt.y = snap_pt[1];</div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;  pt.z = snap_pt[2];</div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;  <span class="keywordtype">size_t</span> n_pts = tree_-&gt;radiusSearch (pt, 3*in_sigma_dist, k_ind_, k_sqr_dist_);</div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160; </div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 0; j &lt; n_pts; j++)</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;  {</div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    <span class="keywordtype">double</span> <a class="code" href="classpcl_1_1kernel.html">kernel</a> = votes_-&gt;points[k_ind_[j]].strength * exp (-k_sqr_dist_[j] / (in_sigma_dist * in_sigma_dist));</div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    Eigen::Vector3f vote_vec (votes_-&gt;points[k_ind_[j]].x, votes_-&gt;points[k_ind_[j]].y, votes_-&gt;points[k_ind_[j]].z);</div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    wgh_sum += vote_vec * <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1kernel.html">kernel</a>);</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    denom += <a class="code" href="classpcl_1_1kernel.html">kernel</a>;</div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;  }</div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;  assert (denom &gt; 0.0); <span class="comment">// at least one point is close. In fact, this case should be handled too</span></div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160; </div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;  <span class="keywordflow">return</span> (wgh_sum / <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (denom));</div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;}</div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160; </div>
<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Po<span class="keywordtype">int</span>T&gt; <span class="keywordtype">double</span></div>
<div class="line"><a name="l00268"></a><span class="lineno"><a class="line" href="classpcl_1_1features_1_1_i_s_m_vote_list.html#ac284edd6499950c3eafe533608e5b132">  268</a></span>&#160;<a class="code" href="classpcl_1_1features_1_1_i_s_m_vote_list.html#ac284edd6499950c3eafe533608e5b132">pcl::features::ISMVoteList&lt;PointT&gt;::getDensityAtPoint</a> (</div>
<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    <span class="keyword">const</span> <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &amp;point, <span class="keywordtype">double</span> sigma_dist)</div>
<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;{</div>
<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;  validateTree ();</div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160; </div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">size_t</span> n_vote_classes = votes_class_.size ();</div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;  <span class="keywordflow">if</span> (n_vote_classes == 0)</div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;    <span class="keywordflow">return</span> (0.0);</div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160; </div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;  <span class="keywordtype">double</span> sum_vote = 0.0;</div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160; </div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;  <a class="code" href="structpcl_1_1_interest_point.html">pcl::InterestPoint</a> pt;</div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;  pt.x = point.x;</div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;  pt.y = point.y;</div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;  pt.z = point.z;</div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;  <span class="keywordtype">size_t</span> num_of_pts = tree_-&gt;radiusSearch (pt, 3 * sigma_dist, k_ind_, k_sqr_dist_);</div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160; </div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 0; j &lt; num_of_pts; j++)</div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    sum_vote += votes_-&gt;points[k_ind_[j]].strength * exp (-k_sqr_dist_[j] / (sigma_dist * sigma_dist));</div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160; </div>
<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;  <span class="keywordflow">return</span> (sum_vote);</div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;}</div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160; </div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Po<span class="keywordtype">int</span>T&gt; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span></div>
<div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="classpcl_1_1features_1_1_i_s_m_vote_list.html#ab3c9ca4a2308c959ac5a0009be35f7a8">  293</a></span>&#160;<a class="code" href="classpcl_1_1features_1_1_i_s_m_vote_list.html#ab3c9ca4a2308c959ac5a0009be35f7a8">pcl::features::ISMVoteList&lt;PointT&gt;::getNumberOfVotes</a> ()</div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;{</div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;  <span class="keywordflow">return</span> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (votes_-&gt;points.size ()));</div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;}</div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160; </div>
<div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="structpcl_1_1features_1_1_i_s_m_model.html#a5bacc0d9fd7c6decfc8f962aa49197b4">  299</a></span>&#160;<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#a5bacc0d9fd7c6decfc8f962aa49197b4">pcl::features::ISMModel::ISMModel</a> () :</div>
<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;  statistical_weights_ (0),</div>
<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;  learned_weights_ (0),</div>
<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;  classes_ (0),</div>
<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;  sigmas_ (0),</div>
<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;  directions_to_center_ (),</div>
<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;  clusters_centers_ (),</div>
<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;  clusters_ (0),</div>
<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;  number_of_classes_ (0),</div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;  number_of_visual_words_ (0),</div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;  number_of_clusters_ (0),</div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;  descriptors_dimension_ (0)</div>
<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;{</div>
<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;}</div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160; </div>
<div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="structpcl_1_1features_1_1_i_s_m_model.html#aa7bc0d938cd8faa361c65b2df61de85b">  315</a></span>&#160;<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#a5bacc0d9fd7c6decfc8f962aa49197b4">pcl::features::ISMModel::ISMModel</a> (<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html">ISMModel</a> <span class="keyword">const</span> &amp; copy)</div>
<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;{</div>
<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;  reset ();</div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160; </div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;  this-&gt;number_of_classes_ = copy.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#ad7a14d1495e3cf56f04b68d901622fa9">number_of_classes_</a>;</div>
<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;  this-&gt;number_of_visual_words_ = copy.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#ae35476b0343c107a91925e6e81e7818c">number_of_visual_words_</a>;</div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;  this-&gt;number_of_clusters_ = copy.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#a0a607d64662e2f19fbe3a8d79234ead0">number_of_clusters_</a>;</div>
<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;  this-&gt;descriptors_dimension_ = copy.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#a842174ec75a4ffeb634adef848e7dc40">descriptors_dimension_</a>;</div>
<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160; </div>
<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;  std::vector&lt;float&gt; vec;</div>
<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;  vec.resize (this-&gt;number_of_clusters_, 0.0f);</div>
<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;  this-&gt;statistical_weights_.resize (this-&gt;number_of_classes_, vec);</div>
<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_class = 0; i_class &lt; this-&gt;number_of_classes_; i_class++)</div>
<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_cluster = 0; i_cluster &lt; this-&gt;number_of_clusters_; i_cluster++)</div>
<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;      this-&gt;statistical_weights_[i_class][i_cluster] = copy.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#adb5f36818b76fbcb57e36e0ce876bda0">statistical_weights_</a>[i_class][i_cluster];</div>
<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160; </div>
<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;  this-&gt;learned_weights_.resize (this-&gt;number_of_visual_words_, 0.0f);</div>
<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_visual_word = 0; i_visual_word &lt; this-&gt;number_of_visual_words_; i_visual_word++)</div>
<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    this-&gt;learned_weights_[i_visual_word] = copy.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#a8e515449f74b5e1b651ac1019e9be335">learned_weights_</a>[i_visual_word];</div>
<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160; </div>
<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;  this-&gt;classes_.resize (this-&gt;number_of_visual_words_, 0);</div>
<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_visual_word = 0; i_visual_word &lt; this-&gt;number_of_visual_words_; i_visual_word++)</div>
<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    this-&gt;classes_[i_visual_word] = copy.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#aab08d3d3c4df77ee8f86c77cd28b801e">classes_</a>[i_visual_word];</div>
<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160; </div>
<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;  this-&gt;sigmas_.resize (this-&gt;number_of_classes_, 0.0f);</div>
<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_class = 0; i_class &lt; this-&gt;number_of_classes_; i_class++)</div>
<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;    this-&gt;sigmas_[i_class] = copy.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#a8a2bbee7dcf135ce59b3d219c381cc94">sigmas_</a>[i_class];</div>
<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160; </div>
<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;  this-&gt;directions_to_center_.resize (this-&gt;number_of_visual_words_, 3);</div>
<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_visual_word = 0; i_visual_word &lt; this-&gt;number_of_visual_words_; i_visual_word++)</div>
<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_dim = 0; i_dim &lt; 3; i_dim++)</div>
<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;      this-&gt;directions_to_center_ (i_visual_word, i_dim) = copy.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#ad4a191c684756c11afdbb49ad0f8c704">directions_to_center_</a> (i_visual_word, i_dim);</div>
<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160; </div>
<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;  this-&gt;clusters_centers_.resize (this-&gt;number_of_clusters_, 3);</div>
<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_cluster = 0; i_cluster &lt; this-&gt;number_of_clusters_; i_cluster++)</div>
<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_dim = 0; i_dim &lt; this-&gt;descriptors_dimension_; i_dim++)</div>
<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;      this-&gt;clusters_centers_ (i_cluster, i_dim) = copy.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#a57fea44012b62bb62e7e019331c1109e">clusters_centers_</a> (i_cluster, i_dim);</div>
<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;}</div>
<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160; </div>
<div class="line"><a name="l00355"></a><span class="lineno"><a class="line" href="structpcl_1_1features_1_1_i_s_m_model.html#a8357d8182720f7cfdcc9ec53d9be8a3b">  355</a></span>&#160;<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#a8357d8182720f7cfdcc9ec53d9be8a3b">pcl::features::ISMModel::~ISMModel</a> ()</div>
<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;{</div>
<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;  reset ();</div>
<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;}</div>
<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160; </div>
<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00362"></a><span class="lineno"><a class="line" href="structpcl_1_1features_1_1_i_s_m_model.html#aaa1bbfa2a5745f94abc2e29de49d0e15">  362</a></span>&#160;<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#aaa1bbfa2a5745f94abc2e29de49d0e15">pcl::features::ISMModel::saveModelToFile</a> (std::string&amp; file_name)</div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;{</div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;  std::ofstream output_file (file_name.c_str (), std::ios::trunc);</div>
<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;  <span class="keywordflow">if</span> (!output_file)</div>
<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;  {</div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;    output_file.close ();</div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    <span class="keywordflow">return</span> (<span class="keyword">false</span>);</div>
<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;  }</div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160; </div>
<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;  output_file &lt;&lt; number_of_classes_ &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;  output_file &lt;&lt; number_of_visual_words_ &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;  output_file &lt;&lt; number_of_clusters_ &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;  output_file &lt;&lt; descriptors_dimension_ &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160; </div>
<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;  <span class="comment">//write statistical weights</span></div>
<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_class = 0; i_class &lt; number_of_classes_; i_class++)</div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_cluster = 0; i_cluster &lt; number_of_clusters_; i_cluster++)</div>
<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;      output_file &lt;&lt; statistical_weights_[i_class][i_cluster] &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160; </div>
<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;  <span class="comment">//write learned weights</span></div>
<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_visual_word = 0; i_visual_word &lt; number_of_visual_words_; i_visual_word++)</div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;    output_file &lt;&lt; learned_weights_[i_visual_word] &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160; </div>
<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;  <span class="comment">//write classes</span></div>
<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_visual_word = 0; i_visual_word &lt; number_of_visual_words_; i_visual_word++)</div>
<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    output_file &lt;&lt; classes_[i_visual_word] &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160; </div>
<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;  <span class="comment">//write sigmas</span></div>
<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_class = 0; i_class &lt; number_of_classes_; i_class++)</div>
<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;    output_file &lt;&lt; sigmas_[i_class] &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160; </div>
<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;  <span class="comment">//write directions to centers</span></div>
<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_visual_word = 0; i_visual_word &lt; number_of_visual_words_; i_visual_word++)</div>
<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_dim = 0; i_dim &lt; 3; i_dim++)</div>
<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;      output_file &lt;&lt; directions_to_center_ (i_visual_word, i_dim) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160; </div>
<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;  <span class="comment">//write clusters centers</span></div>
<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_cluster = 0; i_cluster &lt; number_of_clusters_; i_cluster++)</div>
<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_dim = 0; i_dim &lt; descriptors_dimension_; i_dim++)</div>
<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;      output_file &lt;&lt; clusters_centers_ (i_cluster, i_dim) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160; </div>
<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;  <span class="comment">//write clusters</span></div>
<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_cluster = 0; i_cluster &lt; number_of_clusters_; i_cluster++)</div>
<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;  {</div>
<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;    output_file &lt;&lt; static_cast&lt;unsigned int&gt; (clusters_[i_cluster].size ()) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_visual_word = 0; i_visual_word &lt; static_cast&lt;unsigned int&gt; (clusters_[i_cluster].size ()); i_visual_word++)</div>
<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;      output_file &lt;&lt; clusters_[i_cluster][i_visual_word] &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;  }</div>
<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160; </div>
<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;  output_file.close ();</div>
<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;  <span class="keywordflow">return</span> (<span class="keyword">true</span>);</div>
<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;}</div>
<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160; </div>
<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00417"></a><span class="lineno"><a class="line" href="structpcl_1_1features_1_1_i_s_m_model.html#a7752d924c5d4a19ec3d584e52881bb3c">  417</a></span>&#160;<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#a7752d924c5d4a19ec3d584e52881bb3c">pcl::features::ISMModel::loadModelFromfile</a> (std::string&amp; file_name)</div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;{</div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;  reset ();</div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;  std::ifstream input_file (file_name.c_str ());</div>
<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;  <span class="keywordflow">if</span> (!input_file)</div>
<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;  {</div>
<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;    input_file.close ();</div>
<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;    <span class="keywordflow">return</span> (<span class="keyword">false</span>);</div>
<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;  }</div>
<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160; </div>
<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;  <span class="keywordtype">char</span> line[256];</div>
<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160; </div>
<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;  input_file.getline (line, 256, <span class="charliteral">&#39; &#39;</span>);</div>
<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;  number_of_classes_ = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (strtol (line, 0, 10));</div>
<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;  input_file.getline (line, 256, <span class="charliteral">&#39; &#39;</span>); number_of_visual_words_ = atoi (line);</div>
<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;  input_file.getline (line, 256, <span class="charliteral">&#39; &#39;</span>); number_of_clusters_ = atoi (line);</div>
<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;  input_file.getline (line, 256, <span class="charliteral">&#39; &#39;</span>); descriptors_dimension_ = atoi (line);</div>
<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160; </div>
<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;  <span class="comment">//read statistical weights</span></div>
<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;  std::vector&lt;float&gt; vec;</div>
<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;  vec.resize (number_of_clusters_, 0.0f);</div>
<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;  statistical_weights_.resize (number_of_classes_, vec);</div>
<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_class = 0; i_class &lt; number_of_classes_; i_class++)</div>
<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_cluster = 0; i_cluster &lt; number_of_clusters_; i_cluster++)</div>
<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;      input_file &gt;&gt; statistical_weights_[i_class][i_cluster];</div>
<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160; </div>
<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;  <span class="comment">//read learned weights</span></div>
<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;  learned_weights_.resize (number_of_visual_words_, 0.0f);</div>
<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_visual_word = 0; i_visual_word &lt; number_of_visual_words_; i_visual_word++)</div>
<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;    input_file &gt;&gt; learned_weights_[i_visual_word];</div>
<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160; </div>
<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;  <span class="comment">//read classes</span></div>
<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;  classes_.resize (number_of_visual_words_, 0);</div>
<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_visual_word = 0; i_visual_word &lt; number_of_visual_words_; i_visual_word++)</div>
<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;    input_file &gt;&gt; classes_[i_visual_word];</div>
<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160; </div>
<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;  <span class="comment">//read sigmas</span></div>
<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;  sigmas_.resize (number_of_classes_, 0.0f);</div>
<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_class = 0; i_class &lt; number_of_classes_; i_class++)</div>
<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;    input_file &gt;&gt; sigmas_[i_class];</div>
<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160; </div>
<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;  <span class="comment">//read directions to centers</span></div>
<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;  directions_to_center_.resize (number_of_visual_words_, 3);</div>
<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_visual_word = 0; i_visual_word &lt; number_of_visual_words_; i_visual_word++)</div>
<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_dim = 0; i_dim &lt; 3; i_dim++)</div>
<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;      input_file &gt;&gt; directions_to_center_ (i_visual_word, i_dim);</div>
<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160; </div>
<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;  <span class="comment">//read clusters centers</span></div>
<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;  clusters_centers_.resize (number_of_clusters_, descriptors_dimension_);</div>
<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_cluster = 0; i_cluster &lt; number_of_clusters_; i_cluster++)</div>
<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_dim = 0; i_dim &lt; descriptors_dimension_; i_dim++)</div>
<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;      input_file &gt;&gt; clusters_centers_ (i_cluster, i_dim);</div>
<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160; </div>
<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;  <span class="comment">//read clusters</span></div>
<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;  std::vector&lt;unsigned int&gt; vect;</div>
<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;  clusters_.resize (number_of_clusters_, vect);</div>
<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_cluster = 0; i_cluster &lt; number_of_clusters_; i_cluster++)</div>
<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;  {</div>
<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size_of_current_cluster = 0;</div>
<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;    input_file &gt;&gt; size_of_current_cluster;</div>
<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;    clusters_[i_cluster].resize (size_of_current_cluster, 0);</div>
<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_visual_word = 0; i_visual_word &lt; size_of_current_cluster; i_visual_word++)</div>
<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;      input_file &gt;&gt; clusters_[i_cluster][i_visual_word];</div>
<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;  }</div>
<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160; </div>
<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;  input_file.close ();</div>
<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;  <span class="keywordflow">return</span> (<span class="keyword">true</span>);</div>
<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;}</div>
<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160; </div>
<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00488"></a><span class="lineno"><a class="line" href="structpcl_1_1features_1_1_i_s_m_model.html#a90511c58d2784cdaca51e42f920ebeae">  488</a></span>&#160;<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#a90511c58d2784cdaca51e42f920ebeae">pcl::features::ISMModel::reset</a> ()</div>
<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;{</div>
<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;  statistical_weights_.clear ();</div>
<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;  learned_weights_.clear ();</div>
<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;  classes_.clear ();</div>
<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;  sigmas_.clear ();</div>
<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;  directions_to_center_.resize (0, 0);</div>
<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;  clusters_centers_.resize (0, 0);</div>
<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;  clusters_.clear ();</div>
<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;  number_of_classes_ = 0;</div>
<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;  number_of_visual_words_ = 0;</div>
<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;  number_of_clusters_ = 0;</div>
<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;  descriptors_dimension_ = 0;</div>
<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;}</div>
<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160; </div>
<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html">pcl::features::ISMModel</a>&amp;</div>
<div class="line"><a name="l00505"></a><span class="lineno"><a class="line" href="structpcl_1_1features_1_1_i_s_m_model.html#a77926537bb0ecf955dae2500f425d76d">  505</a></span>&#160;<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#a77926537bb0ecf955dae2500f425d76d">pcl::features::ISMModel::operator = </a>(<span class="keyword">const</span> <a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html">pcl::features::ISMModel</a>&amp; other)</div>
<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;{</div>
<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;  <span class="keywordflow">if</span> (<span class="keyword">this</span> != &amp;other)</div>
<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;  {</div>
<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;    this-&gt;reset ();</div>
<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160; </div>
<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;    this-&gt;number_of_classes_ = other.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#ad7a14d1495e3cf56f04b68d901622fa9">number_of_classes_</a>;</div>
<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;    this-&gt;number_of_visual_words_ = other.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#ae35476b0343c107a91925e6e81e7818c">number_of_visual_words_</a>;</div>
<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;    this-&gt;number_of_clusters_ = other.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#a0a607d64662e2f19fbe3a8d79234ead0">number_of_clusters_</a>;</div>
<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;    this-&gt;descriptors_dimension_ = other.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#a842174ec75a4ffeb634adef848e7dc40">descriptors_dimension_</a>;</div>
<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160; </div>
<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;    std::vector&lt;float&gt; vec;</div>
<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;    vec.resize (number_of_clusters_, 0.0f);</div>
<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;    this-&gt;statistical_weights_.resize (this-&gt;number_of_classes_, vec);</div>
<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_class = 0; i_class &lt; this-&gt;number_of_classes_; i_class++)</div>
<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_cluster = 0; i_cluster &lt; this-&gt;number_of_clusters_; i_cluster++)</div>
<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;        this-&gt;statistical_weights_[i_class][i_cluster] = other.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#adb5f36818b76fbcb57e36e0ce876bda0">statistical_weights_</a>[i_class][i_cluster];</div>
<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160; </div>
<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;    this-&gt;learned_weights_.resize (this-&gt;number_of_visual_words_, 0.0f);</div>
<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_visual_word = 0; i_visual_word &lt; this-&gt;number_of_visual_words_; i_visual_word++)</div>
<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;      this-&gt;learned_weights_[i_visual_word] = other.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#a8e515449f74b5e1b651ac1019e9be335">learned_weights_</a>[i_visual_word];</div>
<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160; </div>
<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;    this-&gt;classes_.resize (this-&gt;number_of_visual_words_, 0);</div>
<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_visual_word = 0; i_visual_word &lt; this-&gt;number_of_visual_words_; i_visual_word++)</div>
<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;      this-&gt;classes_[i_visual_word] = other.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#aab08d3d3c4df77ee8f86c77cd28b801e">classes_</a>[i_visual_word];</div>
<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160; </div>
<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    this-&gt;sigmas_.resize (this-&gt;number_of_classes_, 0.0f);</div>
<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_class = 0; i_class &lt; this-&gt;number_of_classes_; i_class++)</div>
<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;      this-&gt;sigmas_[i_class] = other.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#a8a2bbee7dcf135ce59b3d219c381cc94">sigmas_</a>[i_class];</div>
<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160; </div>
<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;    this-&gt;directions_to_center_.resize (this-&gt;number_of_visual_words_, 3);</div>
<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_visual_word = 0; i_visual_word &lt; this-&gt;number_of_visual_words_; i_visual_word++)</div>
<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_dim = 0; i_dim &lt; 3; i_dim++)</div>
<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;        this-&gt;directions_to_center_ (i_visual_word, i_dim) = other.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#ad4a191c684756c11afdbb49ad0f8c704">directions_to_center_</a> (i_visual_word, i_dim);</div>
<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160; </div>
<div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;    this-&gt;clusters_centers_.resize (this-&gt;number_of_clusters_, 3);</div>
<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_cluster = 0; i_cluster &lt; this-&gt;number_of_clusters_; i_cluster++)</div>
<div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_dim = 0; i_dim &lt; this-&gt;descriptors_dimension_; i_dim++)</div>
<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;        this-&gt;clusters_centers_ (i_cluster, i_dim) = other.<a class="code" href="structpcl_1_1features_1_1_i_s_m_model.html#a57fea44012b62bb62e7e019331c1109e">clusters_centers_</a> (i_cluster, i_dim);</div>
<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;  }</div>
<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;  <span class="keywordflow">return</span> (*<span class="keyword">this</span>);</div>
<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;}</div>
<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160; </div>
<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt;</div>
<div class="line"><a name="l00550"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a6dfe939775dc97b5a076c815a4d5bdac">  550</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a6dfe939775dc97b5a076c815a4d5bdac">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::ImplicitShapeModelEstimation</a> () :</div>
<div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;  training_clouds_ (0),</div>
<div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;  training_classes_ (0),</div>
<div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;  training_normals_ (0),</div>
<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;  training_sigmas_ (0),</div>
<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;  sampling_size_ (0.1f),</div>
<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;  feature_estimator_ (),</div>
<div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;  number_of_clusters_ (184),</div>
<div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;  n_vot_ON_ (true)</div>
<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;{</div>
<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;}</div>
<div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160; </div>
<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt;</div>
<div class="line"><a name="l00564"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a54ebf011063ef77084762d3f2b08a513">  564</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a54ebf011063ef77084762d3f2b08a513">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::~ImplicitShapeModelEstimation</a> ()</div>
<div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;{</div>
<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;  training_clouds_.clear ();</div>
<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;  training_classes_.clear ();</div>
<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;  training_normals_.clear ();</div>
<div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;  training_sigmas_.clear ();</div>
<div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;  feature_estimator_.reset ();</div>
<div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;}</div>
<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160; </div>
<div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; std::vector&lt;typename pcl::PointCloud&lt;PointT&gt;::Ptr&gt;</div>
<div class="line"><a name="l00575"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a2cfd927e2f6297db673dcc5b96cdc1b4">  575</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a2cfd927e2f6297db673dcc5b96cdc1b4">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::getTrainingClouds</a> ()</div>
<div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;{</div>
<div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;  <span class="keywordflow">return</span> (training_clouds_);</div>
<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;}</div>
<div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160; </div>
<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00582"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a43e42d336b600c4d6e7d8b9665d16c86">  582</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a43e42d336b600c4d6e7d8b9665d16c86">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::setTrainingClouds</a> (</div>
<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;  <span class="keyword">const</span> std::vector&lt; <span class="keyword">typename</span> pcl::PointCloud&lt;PointT&gt;::Ptr &gt;&amp; training_clouds)</div>
<div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;{</div>
<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;  training_clouds_.clear ();</div>
<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;  std::vector&lt;typename pcl::PointCloud&lt;PointT&gt;::Ptr &gt; clouds ( training_clouds.begin (), training_clouds.end () );</div>
<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;  training_clouds_.swap (clouds);</div>
<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;}</div>
<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160; </div>
<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; std::vector&lt;unsigned int&gt;</div>
<div class="line"><a name="l00592"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a82f839cf09e9db845af7659cb66a6fe0">  592</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a82f839cf09e9db845af7659cb66a6fe0">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::getTrainingClasses</a> ()</div>
<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;{</div>
<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;  <span class="keywordflow">return</span> (training_classes_);</div>
<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;}</div>
<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160; </div>
<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00599"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#afa36d00337ee0a1adfc2b566fc46e9d7">  599</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#afa36d00337ee0a1adfc2b566fc46e9d7">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::setTrainingClasses</a> (<span class="keyword">const</span> std::vector&lt;unsigned int&gt;&amp; training_classes)</div>
<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;{</div>
<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;  training_classes_.clear ();</div>
<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;  std::vector&lt;unsigned int&gt; classes ( training_classes.begin (), training_classes.end () );</div>
<div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;  training_classes_.swap (classes);</div>
<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;}</div>
<div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160; </div>
<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; std::vector&lt;typename pcl::PointCloud&lt;NormalT&gt;::Ptr&gt;</div>
<div class="line"><a name="l00608"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#af932b3a78637dc245cda7ea03d45e9e8">  608</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#af932b3a78637dc245cda7ea03d45e9e8">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::getTrainingNormals</a> ()</div>
<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;{</div>
<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;  <span class="keywordflow">return</span> (training_normals_);</div>
<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;}</div>
<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160; </div>
<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00615"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a5c310cb89a7be4b388bea1526111a525">  615</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a5c310cb89a7be4b388bea1526111a525">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::setTrainingNormals</a> (</div>
<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;  <span class="keyword">const</span> std::vector&lt; <span class="keyword">typename</span> pcl::PointCloud&lt;NormalT&gt;::Ptr &gt;&amp; training_normals)</div>
<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;{</div>
<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;  training_normals_.clear ();</div>
<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;  std::vector&lt;typename pcl::PointCloud&lt;NormalT&gt;::Ptr &gt; normals ( training_normals.begin (), training_normals.end () );</div>
<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;  training_normals_.swap (normals);</div>
<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;}</div>
<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160; </div>
<div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">float</span></div>
<div class="line"><a name="l00625"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#afd2eea3c7f85613e9b80bf5b8f822577">  625</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#afd2eea3c7f85613e9b80bf5b8f822577">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::getSamplingSize</a> ()</div>
<div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;{</div>
<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;  <span class="keywordflow">return</span> (sampling_size_);</div>
<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;}</div>
<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160; </div>
<div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00632"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#ae01b18529098566b7244f16ccf864cf1">  632</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#ae01b18529098566b7244f16ccf864cf1">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::setSamplingSize</a> (<span class="keywordtype">float</span> sampling_size)</div>
<div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;{</div>
<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;  <span class="keywordflow">if</span> (sampling_size &gt;= std::numeric_limits&lt;float&gt;::epsilon ())</div>
<div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;    sampling_size_ = sampling_size;</div>
<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;}</div>
<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160; </div>
<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; boost::shared_ptr&lt;pcl::Feature&lt;PointT, pcl::Histogram&lt;FeatureSize&gt; &gt; &gt;</div>
<div class="line"><a name="l00640"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#aca084efb9d923b8963ae18c4b3550564">  640</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#aca084efb9d923b8963ae18c4b3550564">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::getFeatureEstimator</a> ()</div>
<div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;{</div>
<div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;  <span class="keywordflow">return</span> (feature_estimator_);</div>
<div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;}</div>
<div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160; </div>
<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00647"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#aaf734e2f3120bb043404596956f01f6c">  647</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#aaf734e2f3120bb043404596956f01f6c">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::setFeatureEstimator</a> (</div>
<div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;  boost::shared_ptr&lt;<a class="code" href="classpcl_1_1_feature.html">pcl::Feature</a>&lt;<a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>, <a class="code" href="structpcl_1_1_histogram.html">pcl::Histogram&lt;FeatureSize&gt;</a> &gt; &gt; feature)</div>
<div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;{</div>
<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;  feature_estimator_ = feature;</div>
<div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;}</div>
<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160; </div>
<div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span></div>
<div class="line"><a name="l00655"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#ab4cf537c4ecdbd38cdaa92bbefd2654d">  655</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#ab4cf537c4ecdbd38cdaa92bbefd2654d">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::getNumberOfClusters</a> ()</div>
<div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;{</div>
<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;  <span class="keywordflow">return</span> (number_of_clusters_);</div>
<div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;}</div>
<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160; </div>
<div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00662"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#ac0b8072d7f6048c714854202bf00790a">  662</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#ac0b8072d7f6048c714854202bf00790a">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::setNumberOfClusters</a> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_of_clusters)</div>
<div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;{</div>
<div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;  <span class="keywordflow">if</span> (num_of_clusters &gt; 0)</div>
<div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;    number_of_clusters_ = num_of_clusters;</div>
<div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;}</div>
<div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160; </div>
<div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; std::vector&lt;float&gt;</div>
<div class="line"><a name="l00670"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#acddaa58ec2977624f87a24e5432d831e">  670</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#acddaa58ec2977624f87a24e5432d831e">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::getSigmaDists</a> ()</div>
<div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;{</div>
<div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;  <span class="keywordflow">return</span> (training_sigmas_);</div>
<div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;}</div>
<div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160; </div>
<div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00677"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#af8eb194807519f620f01decec6dcd8a7">  677</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#af8eb194807519f620f01decec6dcd8a7">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::setSigmaDists</a> (<span class="keyword">const</span> std::vector&lt;float&gt;&amp; training_sigmas)</div>
<div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;{</div>
<div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;  training_sigmas_.clear ();</div>
<div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;  std::vector&lt;float&gt; sigmas ( training_sigmas.begin (), training_sigmas.end () );</div>
<div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;  training_sigmas_.swap (sigmas);</div>
<div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;}</div>
<div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160; </div>
<div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00686"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a5b8561475b8dcf05c214fdaa3d786918">  686</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a5b8561475b8dcf05c214fdaa3d786918">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::getNVotState</a> ()</div>
<div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;{</div>
<div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;  <span class="keywordflow">return</span> (n_vot_ON_);</div>
<div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;}</div>
<div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160; </div>
<div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00693"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a4a5c99e74ddf4ae9bc3caa3575b6ca11">  693</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a4a5c99e74ddf4ae9bc3caa3575b6ca11">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::setNVotState</a> (<span class="keywordtype">bool</span> state)</div>
<div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;{</div>
<div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;  n_vot_ON_ = state;</div>
<div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;}</div>
<div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160; </div>
<div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00700"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a0df7cc562e4e36d408c2738e67d1191f">  700</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a0df7cc562e4e36d408c2738e67d1191f">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::trainISM</a> (ISMModelPtr&amp; trained_model)</div>
<div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;{</div>
<div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;  <span class="keywordtype">bool</span> success = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160; </div>
<div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;  <span class="keywordflow">if</span> (trained_model == 0)</div>
<div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;    <span class="keywordflow">return</span> (<span class="keyword">false</span>);</div>
<div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;  trained_model-&gt;reset ();</div>
<div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160; </div>
<div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;  std::vector&lt;pcl::Histogram&lt;FeatureSize&gt; &gt; histograms;</div>
<div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;  std::vector&lt;LocationInfo, Eigen::aligned_allocator&lt;LocationInfo&gt; &gt; locations;</div>
<div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;  success = extractDescriptors (histograms, locations);</div>
<div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;  <span class="keywordflow">if</span> (!success)</div>
<div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;    <span class="keywordflow">return</span> (<span class="keyword">false</span>);</div>
<div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160; </div>
<div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;  Eigen::MatrixXi labels;</div>
<div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;  success = clusterDescriptors(histograms, labels, trained_model-&gt;clusters_centers_);</div>
<div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;  <span class="keywordflow">if</span> (!success)</div>
<div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;    <span class="keywordflow">return</span> (<span class="keyword">false</span>);</div>
<div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160; </div>
<div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;  std::vector&lt;unsigned int&gt; vec;</div>
<div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;  trained_model-&gt;clusters_.resize (number_of_clusters_, vec);</div>
<div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i_label = 0; i_label &lt; locations.size (); i_label++)</div>
<div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;    trained_model-&gt;clusters_[labels (i_label)].push_back (i_label);</div>
<div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160; </div>
<div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;  calculateSigmas (trained_model-&gt;sigmas_);</div>
<div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160; </div>
<div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;  calculateWeights(</div>
<div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;    locations,</div>
<div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;    labels,</div>
<div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;    trained_model-&gt;sigmas_,</div>
<div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;    trained_model-&gt;clusters_,</div>
<div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;    trained_model-&gt;statistical_weights_,</div>
<div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;    trained_model-&gt;learned_weights_);</div>
<div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160; </div>
<div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;  trained_model-&gt;number_of_classes_ = *std::max_element (training_classes_.begin (), training_classes_.end () ) + 1;</div>
<div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;  trained_model-&gt;number_of_visual_words_ = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (histograms.size ());</div>
<div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;  trained_model-&gt;number_of_clusters_ = number_of_clusters_;</div>
<div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;  trained_model-&gt;descriptors_dimension_ = FeatureSize;</div>
<div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160; </div>
<div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;  trained_model-&gt;directions_to_center_.resize (locations.size (), 3);</div>
<div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;  trained_model-&gt;classes_.resize (locations.size ());</div>
<div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i_dir = 0; i_dir &lt; locations.size (); i_dir++)</div>
<div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;  {</div>
<div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;    trained_model-&gt;directions_to_center_(i_dir, 0) = locations[i_dir].dir_to_center_.x;</div>
<div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;    trained_model-&gt;directions_to_center_(i_dir, 1) = locations[i_dir].dir_to_center_.y;</div>
<div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;    trained_model-&gt;directions_to_center_(i_dir, 2) = locations[i_dir].dir_to_center_.z;</div>
<div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;    trained_model-&gt;classes_[i_dir] = training_classes_[locations[i_dir].model_num_];</div>
<div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;  }</div>
<div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160; </div>
<div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;  <span class="keywordflow">return</span> (<span class="keyword">true</span>);</div>
<div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;}</div>
<div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160; </div>
<div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; boost::shared_ptr&lt;pcl::features::ISMVoteList&lt;PointT&gt; &gt;</div>
<div class="line"><a name="l00754"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a16e7d9f66e627dc6e68206ffabb45c95">  754</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a16e7d9f66e627dc6e68206ffabb45c95">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::findObjects</a> (</div>
<div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;  ISMModelPtr model,</div>
<div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;  <span class="keyword">typename</span> pcl::PointCloud&lt;PointT&gt;::Ptr in_cloud,</div>
<div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;  <span class="keyword">typename</span> pcl::PointCloud&lt;Normal&gt;::Ptr in_normals,</div>
<div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;  <span class="keywordtype">int</span> in_class_of_interest)</div>
<div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;{</div>
<div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;  boost::shared_ptr&lt;pcl::features::ISMVoteList&lt;PointT&gt; &gt; out_votes (<span class="keyword">new</span> <a class="code" href="classpcl_1_1features_1_1_i_s_m_vote_list.html">pcl::features::ISMVoteList&lt;PointT&gt;</a> ());</div>
<div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160; </div>
<div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;  <span class="keywordflow">if</span> (in_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size () == 0)</div>
<div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;    <span class="keywordflow">return</span> (out_votes);</div>
<div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160; </div>
<div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;  <span class="keyword">typename</span> pcl::PointCloud&lt;PointT&gt;::Ptr sampled_point_cloud (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointT&gt;</a> ());</div>
<div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;  <span class="keyword">typename</span> pcl::PointCloud&lt;NormalT&gt;::Ptr sampled_normal_cloud (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;NormalT&gt;</a> ());</div>
<div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;  simplifyCloud (in_cloud, in_normals, sampled_point_cloud, sampled_normal_cloud);</div>
<div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;  <span class="keywordflow">if</span> (sampled_point_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size () == 0)</div>
<div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;    <span class="keywordflow">return</span> (out_votes);</div>
<div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160; </div>
<div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;  <span class="keyword">typename</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;pcl::Histogram&lt;FeatureSize&gt;</a> &gt;::Ptr feature_cloud (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt;<a class="code" href="structpcl_1_1_histogram.html">pcl::Histogram&lt;FeatureSize&gt;</a> &gt; ());</div>
<div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;  estimateFeatures (sampled_point_cloud, sampled_normal_cloud, feature_cloud);</div>
<div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160; </div>
<div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;  <span class="comment">//find nearest cluster</span></div>
<div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n_key_points = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (sampled_point_cloud-&gt;size ());</div>
<div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;  std::vector&lt;int&gt; min_dist_inds (n_key_points, -1);</div>
<div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_point = 0; i_point &lt; n_key_points; i_point++)</div>
<div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;  {</div>
<div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;    Eigen::VectorXf curr_descriptor (FeatureSize);</div>
<div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_dim = 0; i_dim &lt; FeatureSize; i_dim++)</div>
<div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;      curr_descriptor (i_dim) = feature_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i_point].histogram[i_dim];</div>
<div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160; </div>
<div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;    <span class="keywordtype">float</span> descriptor_sum = curr_descriptor.sum ();</div>
<div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;    <span class="keywordflow">if</span> (descriptor_sum &lt; std::numeric_limits&lt;float&gt;::epsilon ())</div>
<div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;      <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160; </div>
<div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> min_dist_idx = 0;</div>
<div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;    Eigen::VectorXf clusters_center (FeatureSize);</div>
<div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_dim = 0; i_dim &lt; FeatureSize; i_dim++)</div>
<div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;      clusters_center (i_dim) = model-&gt;clusters_centers_ (min_dist_idx, i_dim);</div>
<div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160; </div>
<div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;    <span class="keywordtype">float</span> best_dist = computeDistance (curr_descriptor, clusters_center);</div>
<div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_clust_cent = 0; i_clust_cent &lt; number_of_clusters_; i_clust_cent++)</div>
<div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;    {</div>
<div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_dim = 0; i_dim &lt; FeatureSize; i_dim++)</div>
<div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;        clusters_center (i_dim) = model-&gt;clusters_centers_ (i_clust_cent, i_dim);</div>
<div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;      <span class="keywordtype">float</span> curr_dist = computeDistance (clusters_center, curr_descriptor);</div>
<div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;      <span class="keywordflow">if</span> (curr_dist &lt; best_dist)</div>
<div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;      {</div>
<div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;        min_dist_idx = i_clust_cent;</div>
<div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;        best_dist = curr_dist;</div>
<div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;      }</div>
<div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;    }</div>
<div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;    min_dist_inds[i_point] = min_dist_idx;</div>
<div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;  }<span class="comment">//next keypoint</span></div>
<div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160; </div>
<div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i_point = 0; i_point &lt; n_key_points; i_point++)</div>
<div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;  {</div>
<div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;    <span class="keywordtype">int</span> min_dist_idx = min_dist_inds[i_point];</div>
<div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;    <span class="keywordflow">if</span> (min_dist_idx == -1)</div>
<div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;      <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160; </div>
<div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n_words = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (model-&gt;clusters_[min_dist_idx].size ());</div>
<div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;    <span class="comment">//compute coord system transform</span></div>
<div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;    Eigen::Matrix3f transform = alignYCoordWithNormal (sampled_normal_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i_point]);</div>
<div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_word = 0; i_word &lt; n_words; i_word++)</div>
<div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;    {</div>
<div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;      <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = model-&gt;clusters_[min_dist_idx][i_word];</div>
<div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;      <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_class = model-&gt;classes_[index];</div>
<div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;      <span class="keywordflow">if</span> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (i_class) != in_class_of_interest)</div>
<div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;        <span class="keywordflow">continue</span>;<span class="comment">//skip this class</span></div>
<div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160; </div>
<div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;      <span class="comment">//rotate dir to center as needed</span></div>
<div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;      Eigen::Vector3f direction (</div>
<div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;        model-&gt;directions_to_center_(index, 0),</div>
<div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;        model-&gt;directions_to_center_(index, 1),</div>
<div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;        model-&gt;directions_to_center_(index, 2));</div>
<div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;      applyTransform (direction, transform.transpose ());</div>
<div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160; </div>
<div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;      <a class="code" href="structpcl_1_1_interest_point.html">pcl::InterestPoint</a> vote;</div>
<div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;      Eigen::Vector3f vote_pos = sampled_point_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i_point].getVector3fMap () + direction;</div>
<div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;      vote.x = vote_pos[0];</div>
<div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;      vote.y = vote_pos[1];</div>
<div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;      vote.z = vote_pos[2];</div>
<div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;      <span class="keywordtype">float</span> statistical_weight = model-&gt;statistical_weights_[in_class_of_interest][min_dist_idx];</div>
<div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;      <span class="keywordtype">float</span> learned_weight = model-&gt;learned_weights_[index];</div>
<div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;      <span class="keywordtype">float</span> power = statistical_weight * learned_weight;</div>
<div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;      vote.strength = power;</div>
<div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;      <span class="keywordflow">if</span> (vote.strength &gt; std::numeric_limits&lt;float&gt;::epsilon ())</div>
<div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;        out_votes-&gt;addVote (vote, sampled_point_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i_point], i_class);</div>
<div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;    }</div>
<div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;  }<span class="comment">//next point</span></div>
<div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160; </div>
<div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;  <span class="keywordflow">return</span> (out_votes);</div>
<div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;}</div>
<div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160; </div>
<div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00849"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#aada2c42e9685032c4cd2beb2a29b157c">  849</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#aada2c42e9685032c4cd2beb2a29b157c">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::extractDescriptors</a> (</div>
<div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;  std::vector&lt; <a class="code" href="structpcl_1_1_histogram.html">pcl::Histogram&lt;FeatureSize&gt;</a> &gt;&amp; histograms,</div>
<div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;  std::vector&lt; <a class="code" href="structpcl_1_1ism_1_1_implicit_shape_model_estimation_1_1_location_info.html">LocationInfo</a>, Eigen::aligned_allocator&lt;LocationInfo&gt; &gt;&amp; locations)</div>
<div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;{</div>
<div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;  histograms.clear ();</div>
<div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;  locations.clear ();</div>
<div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160; </div>
<div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;  <span class="keywordtype">int</span> n_key_points = 0;</div>
<div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160; </div>
<div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;  <span class="keywordflow">if</span> (training_clouds_.size () == 0 || training_classes_.size () == 0 || feature_estimator_ == 0)</div>
<div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;    <span class="keywordflow">return</span> (<span class="keyword">false</span>);</div>
<div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160; </div>
<div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i_cloud = 0; i_cloud &lt; training_clouds_.size (); i_cloud++)</div>
<div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;  {</div>
<div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;    <span class="comment">//compute the center of the training object</span></div>
<div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;    Eigen::Vector3f models_center (0.0f, 0.0f, 0.0f);</div>
<div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> num_of_points =  training_clouds_[i_cloud]-&gt;points.size ();</div>
<div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;    <span class="keyword">typename</span> pcl::PointCloud&lt;PointT&gt;::iterator point_j;</div>
<div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;    <span class="keywordflow">for</span> (point_j = training_clouds_[i_cloud]-&gt;begin (); point_j != training_clouds_[i_cloud]-&gt;end (); point_j++)</div>
<div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;      models_center += point_j-&gt;getVector3fMap ();</div>
<div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;    models_center /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (num_of_points);</div>
<div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160; </div>
<div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;    <span class="comment">//downsample the cloud</span></div>
<div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;    <span class="keyword">typename</span> pcl::PointCloud&lt;PointT&gt;::Ptr sampled_point_cloud (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointT&gt;</a> ());</div>
<div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;    <span class="keyword">typename</span> pcl::PointCloud&lt;NormalT&gt;::Ptr sampled_normal_cloud (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;NormalT&gt;</a> ());</div>
<div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;    simplifyCloud (training_clouds_[i_cloud], training_normals_[i_cloud], sampled_point_cloud, sampled_normal_cloud);</div>
<div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;    <span class="keywordflow">if</span> (sampled_point_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size () == 0)</div>
<div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;      <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160; </div>
<div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;    shiftCloud (training_clouds_[i_cloud], models_center);</div>
<div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;    shiftCloud (sampled_point_cloud, models_center);</div>
<div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160; </div>
<div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;    n_key_points += <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (sampled_point_cloud-&gt;size ());</div>
<div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160; </div>
<div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;    <span class="keyword">typename</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;pcl::Histogram&lt;FeatureSize&gt;</a> &gt;::Ptr feature_cloud (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt;<a class="code" href="structpcl_1_1_histogram.html">pcl::Histogram&lt;FeatureSize&gt;</a> &gt; ());</div>
<div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;    estimateFeatures (sampled_point_cloud, sampled_normal_cloud, feature_cloud);</div>
<div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160; </div>
<div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;    <span class="keywordtype">int</span> point_index = 0;</div>
<div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;    <span class="keyword">typename</span> pcl::PointCloud&lt;PointT&gt;::iterator point_i;</div>
<div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;    <span class="keywordflow">for</span> (point_i = sampled_point_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.begin (); point_i != sampled_point_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.end (); point_i++, point_index++)</div>
<div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;    {</div>
<div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;      <span class="keywordtype">float</span> descriptor_sum = Eigen::VectorXf::Map (feature_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[point_index].histogram, FeatureSize).sum ();</div>
<div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;      <span class="keywordflow">if</span> (descriptor_sum &lt; std::numeric_limits&lt;float&gt;::epsilon ())</div>
<div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160; </div>
<div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;      histograms.insert ( histograms.end (), feature_cloud-&gt;begin () + point_index, feature_cloud-&gt;begin () + point_index + 1 );</div>
<div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160; </div>
<div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;      <span class="keywordtype">int</span> dist = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (std::distance (sampled_point_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.begin (), point_i));</div>
<div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;      Eigen::Matrix3f new_basis = alignYCoordWithNormal (sampled_normal_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[dist]);</div>
<div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;      Eigen::Vector3f zero;</div>
<div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;      zero (0) = 0.0;</div>
<div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;      zero (1) = 0.0;</div>
<div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;      zero (2) = 0.0;</div>
<div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;      Eigen::Vector3f new_dir = zero - point_i-&gt;getVector3fMap ();</div>
<div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;      applyTransform (new_dir, new_basis);</div>
<div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160; </div>
<div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;      <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> point (new_dir[0], new_dir[1], new_dir[2]);</div>
<div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;      <a class="code" href="structpcl_1_1ism_1_1_implicit_shape_model_estimation_1_1_location_info.html">LocationInfo</a> info (<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (i_cloud), point, *point_i, sampled_normal_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[dist]);</div>
<div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;      locations.insert(locations.end (), info);</div>
<div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;    }</div>
<div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;  }<span class="comment">//next training cloud</span></div>
<div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160; </div>
<div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;  <span class="keywordflow">return</span> (<span class="keyword">true</span>);</div>
<div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;}</div>
<div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160; </div>
<div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00916"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#accdd4bb97e49ade2295cd49f59e78eba">  916</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#accdd4bb97e49ade2295cd49f59e78eba">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::clusterDescriptors</a> (</div>
<div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;  std::vector&lt; <a class="code" href="structpcl_1_1_histogram.html">pcl::Histogram&lt;FeatureSize&gt;</a> &gt;&amp; histograms,</div>
<div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;  Eigen::MatrixXi&amp; labels,</div>
<div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;  Eigen::MatrixXf&amp; clusters_centers)</div>
<div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;{</div>
<div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;  Eigen::MatrixXf points_to_cluster (histograms.size (), FeatureSize);</div>
<div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160; </div>
<div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_feature = 0; i_feature &lt; histograms.size (); i_feature++)</div>
<div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_dim = 0; i_dim &lt; FeatureSize; i_dim++)</div>
<div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;      points_to_cluster (i_feature, i_dim) = histograms[i_feature].histogram[i_dim];</div>
<div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160; </div>
<div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;  labels.resize (histograms.size(), 1);</div>
<div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;  computeKMeansClustering (</div>
<div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;    points_to_cluster,</div>
<div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;    number_of_clusters_,</div>
<div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;    labels,</div>
<div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;    <a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a2110e36af289f3b172a1aecff09e300c">TermCriteria</a>(TermCriteria::EPS|TermCriteria::COUNT, 10, 0.01f),<span class="comment">//1000</span></div>
<div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;    5,</div>
<div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;    PP_CENTERS,</div>
<div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;    clusters_centers);</div>
<div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160; </div>
<div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;  <span class="keywordflow">return</span> (<span class="keyword">true</span>);</div>
<div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;}</div>
<div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160; </div>
<div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00942"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#ab5390e2ac51390339be681e644a1bdc9">  942</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#ab5390e2ac51390339be681e644a1bdc9">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::calculateSigmas</a> (std::vector&lt;float&gt;&amp; sigmas)</div>
<div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;{</div>
<div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;  <span class="keywordflow">if</span> (training_sigmas_.size () != 0)</div>
<div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;  {</div>
<div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;    sigmas.resize (training_sigmas_.size (), 0.0f);</div>
<div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_sigma = 0; i_sigma &lt; training_sigmas_.size (); i_sigma++)</div>
<div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;      sigmas[i_sigma] = training_sigmas_[i_sigma];</div>
<div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;  }</div>
<div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160; </div>
<div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;  sigmas.clear ();</div>
<div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> number_of_classes = *std::max_element (training_classes_.begin (), training_classes_.end () ) + 1;</div>
<div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;  sigmas.resize (number_of_classes, 0.0f);</div>
<div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160; </div>
<div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;  std::vector&lt;float&gt; vec;</div>
<div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;  std::vector&lt;std::vector&lt;float&gt; &gt; objects_sigmas;</div>
<div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;  objects_sigmas.resize (number_of_classes, vec);</div>
<div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160; </div>
<div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> number_of_objects = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (training_clouds_.size ());</div>
<div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_object = 0; i_object &lt; number_of_objects; i_object++)</div>
<div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;  {</div>
<div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;    <span class="keywordtype">float</span> max_distance = 0.0f;</div>
<div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> number_of_points = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (training_clouds_[i_object]-&gt;points.size ());</div>
<div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_point = 0; i_point &lt; number_of_points - 1; i_point++)</div>
<div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j_point = i_point + 1; j_point &lt; number_of_points; j_point++)</div>
<div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;      {</div>
<div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;        <span class="keywordtype">float</span> curr_distance = 0.0f;</div>
<div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;        curr_distance += training_clouds_[i_object]-&gt;points[i_point].x * training_clouds_[i_object]-&gt;points[j_point].x;</div>
<div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;        curr_distance += training_clouds_[i_object]-&gt;points[i_point].y * training_clouds_[i_object]-&gt;points[j_point].y;</div>
<div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;        curr_distance += training_clouds_[i_object]-&gt;points[i_point].z * training_clouds_[i_object]-&gt;points[j_point].z;</div>
<div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;        <span class="keywordflow">if</span> (curr_distance &gt; max_distance)</div>
<div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;          max_distance = curr_distance;</div>
<div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;      }</div>
<div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;    max_distance = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (sqrt (max_distance));</div>
<div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_class = training_classes_[i_object];</div>
<div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;    objects_sigmas[i_class].push_back (max_distance);</div>
<div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;  }</div>
<div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160; </div>
<div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_class = 0; i_class &lt; number_of_classes; i_class++)</div>
<div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;  {</div>
<div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;    <span class="keywordtype">float</span> sig = 0.0f;</div>
<div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> number_of_objects_in_class = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (objects_sigmas[i_class].size ());</div>
<div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_object = 0; i_object &lt; number_of_objects_in_class; i_object++)</div>
<div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;      sig += objects_sigmas[i_class][i_object];</div>
<div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;    sig /= (<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (number_of_objects_in_class) * 10.0f);</div>
<div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;    sigmas[i_class] = sig;</div>
<div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;  }</div>
<div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;}</div>
<div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160; </div>
<div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00993"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a833845333ec925a77af5b963953ee37d">  993</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a833845333ec925a77af5b963953ee37d">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::calculateWeights</a> (</div>
<div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;  <span class="keyword">const</span> std::vector&lt; <a class="code" href="structpcl_1_1ism_1_1_implicit_shape_model_estimation_1_1_location_info.html">LocationInfo</a>, Eigen::aligned_allocator&lt;LocationInfo&gt; &gt;&amp; locations,</div>
<div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;  <span class="keyword">const</span> Eigen::MatrixXi &amp;labels,</div>
<div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;  std::vector&lt;float&gt;&amp; sigmas,</div>
<div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;  std::vector&lt;std::vector&lt;unsigned int&gt; &gt;&amp; clusters,</div>
<div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;  std::vector&lt;std::vector&lt;float&gt; &gt;&amp; statistical_weights,</div>
<div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;  std::vector&lt;float&gt;&amp; learned_weights)</div>
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;{</div>
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> number_of_classes = *std::max_element (training_classes_.begin (), training_classes_.end () ) + 1;</div>
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;  <span class="comment">//Temporary variable</span></div>
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;  std::vector&lt;float&gt; vec;</div>
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;  vec.resize (number_of_clusters_, 0.0f);</div>
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;  statistical_weights.clear ();</div>
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;  learned_weights.clear ();</div>
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;  statistical_weights.resize (number_of_classes, vec);</div>
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;  learned_weights.resize (locations.size (), 0.0f);</div>
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; </div>
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;  <span class="comment">//Temporary variable</span></div>
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;  std::vector&lt;int&gt; vect;</div>
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;  vect.resize (*std::max_element (training_classes_.begin (), training_classes_.end () ) + 1, 0);</div>
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; </div>
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;  <span class="comment">//Number of features from which c_i was learned</span></div>
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;  std::vector&lt;int&gt; n_ftr;</div>
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; </div>
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;  <span class="comment">//Total number of votes from visual word v_j</span></div>
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;  std::vector&lt;int&gt; n_vot;</div>
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; </div>
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;  <span class="comment">//Number of visual words that vote for class c_i</span></div>
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;  std::vector&lt;int&gt; n_vw;</div>
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; </div>
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;  <span class="comment">//Number of votes for class c_i from v_j</span></div>
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;  std::vector&lt;std::vector&lt;int&gt; &gt; n_vot_2;</div>
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; </div>
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;  n_vot_2.resize (number_of_clusters_, vect);</div>
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;  n_vot.resize (number_of_clusters_, 0);</div>
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;  n_ftr.resize (number_of_classes, 0);</div>
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i_location = 0; i_location &lt; locations.size (); i_location++)</div>
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;  {</div>
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;    <span class="keywordtype">int</span> i_class = training_classes_[locations[i_location].model_num_];</div>
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;    <span class="keywordtype">int</span> i_cluster = labels (i_location);</div>
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;    n_vot_2[i_cluster][i_class] += 1;</div>
<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;    n_vot[i_cluster] += 1;</div>
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;    n_ftr[i_class] += 1;</div>
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;  }</div>
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; </div>
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;  n_vw.resize (number_of_classes, 0);</div>
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_class = 0; i_class &lt; number_of_classes; i_class++)</div>
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_cluster = 0; i_cluster &lt; number_of_clusters_; i_cluster++)</div>
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;      <span class="keywordflow">if</span> (n_vot_2[i_cluster][i_class] &gt; 0)</div>
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;        n_vw[i_class] += 1;</div>
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; </div>
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;  <span class="comment">//computing learned weights</span></div>
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;  learned_weights.resize (locations.size (), 0.0);</div>
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_cluster = 0; i_cluster &lt; number_of_clusters_; i_cluster++)</div>
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;  {</div>
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> number_of_words_in_cluster = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (clusters[i_cluster].size ());</div>
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_visual_word = 0; i_visual_word &lt; number_of_words_in_cluster; i_visual_word++)</div>
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;    {</div>
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;      <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_index = clusters[i_cluster][i_visual_word];</div>
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;      <span class="keywordtype">int</span> i_class = training_classes_[locations[i_index].model_num_];</div>
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;      <span class="keywordtype">float</span> square_sigma_dist = sigmas[i_class] * sigmas[i_class];</div>
<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;      <span class="keywordflow">if</span> (square_sigma_dist &lt; std::numeric_limits&lt;float&gt;::epsilon ())</div>
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;      {</div>
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;        std::vector&lt;float&gt; calculated_sigmas;</div>
<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;        calculateSigmas (calculated_sigmas);</div>
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;        square_sigma_dist = calculated_sigmas[i_class] * calculated_sigmas[i_class];</div>
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;        <span class="keywordflow">if</span> (square_sigma_dist &lt; std::numeric_limits&lt;float&gt;::epsilon ())</div>
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;          <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;      }</div>
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;      Eigen::Matrix3f transform = alignYCoordWithNormal (locations[i_index].normal_);</div>
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;      Eigen::Vector3f direction = locations[i_index].dir_to_center_.getVector3fMap ();</div>
<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;      applyTransform (direction, transform);</div>
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;      Eigen::Vector3f actual_center = locations[i_index].point_.getVector3fMap () + direction;</div>
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; </div>
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;      <span class="comment">//collect gaussian weighted distances</span></div>
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;      std::vector&lt;float&gt; gauss_dists;</div>
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j_visual_word = 0; j_visual_word &lt; number_of_words_in_cluster; j_visual_word++)</div>
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;      {</div>
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j_index = clusters[i_cluster][j_visual_word];</div>
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;        <span class="keywordtype">int</span> j_class = training_classes_[locations[j_index].model_num_];</div>
<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;        <span class="keywordflow">if</span> (i_class != j_class)</div>
<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;          <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;        <span class="comment">//predict center</span></div>
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;        Eigen::Matrix3f transform_2 = alignYCoordWithNormal (locations[j_index].normal_);</div>
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;        Eigen::Vector3f direction_2 = locations[i_index].dir_to_center_.getVector3fMap ();</div>
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;        applyTransform (direction_2, transform_2);</div>
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;        Eigen::Vector3f predicted_center = locations[j_index].point_.getVector3fMap () + direction_2;</div>
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;        <span class="keywordtype">float</span> residual = (predicted_center - actual_center).norm ();</div>
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;        <span class="keywordtype">float</span> value = -residual * residual / square_sigma_dist;</div>
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;        gauss_dists.push_back (<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (exp (value)));</div>
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;      }<span class="comment">//next word</span></div>
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;      <span class="comment">//find median gaussian weighted distance</span></div>
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;      <span class="keywordtype">size_t</span> mid_elem = (gauss_dists.size () - 1) / 2;</div>
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;      std::nth_element (gauss_dists.begin (), gauss_dists.begin () + mid_elem, gauss_dists.end ());</div>
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;      learned_weights[i_index] = *(gauss_dists.begin () + mid_elem);</div>
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;    }<span class="comment">//next word</span></div>
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;  }<span class="comment">//next cluster</span></div>
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; </div>
<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;  <span class="comment">//computing statistical weights</span></div>
<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_cluster = 0; i_cluster &lt; number_of_clusters_; i_cluster++)</div>
<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;  {</div>
<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_class = 0; i_class &lt; number_of_classes; i_class++)</div>
<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;    {</div>
<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;      <span class="keywordflow">if</span> (n_vot_2[i_cluster][i_class] == 0)</div>
<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;        <span class="keywordflow">continue</span>;<span class="comment">//no votes per class of interest in this cluster</span></div>
<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;      <span class="keywordflow">if</span> (n_vw[i_class] == 0)</div>
<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;        <span class="keywordflow">continue</span>;<span class="comment">//there were no objects of this class in the training dataset</span></div>
<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;      <span class="keywordflow">if</span> (n_vot[i_cluster] == 0)</div>
<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;        <span class="keywordflow">continue</span>;<span class="comment">//this cluster has never been used</span></div>
<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;      <span class="keywordflow">if</span> (n_ftr[i_class] == 0)</div>
<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;        <span class="keywordflow">continue</span>;<span class="comment">//there were no objects of this class in the training dataset</span></div>
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;      <span class="keywordtype">float</span> part_1 = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (n_vw[i_class]);</div>
<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;      <span class="keywordtype">float</span> part_2 = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (n_vot[i_cluster]);</div>
<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;      <span class="keywordtype">float</span> part_3 = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (n_vot_2[i_cluster][i_class]) / <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (n_ftr[i_class]);</div>
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;      <span class="keywordtype">float</span> part_4 = 0.0f;</div>
<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; </div>
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;      <span class="keywordflow">if</span> (!n_vot_ON_)</div>
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;        part_2 = 1.0f;</div>
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; </div>
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j_class = 0; j_class &lt; number_of_classes; j_class++)</div>
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;        <span class="keywordflow">if</span> (n_ftr[j_class] != 0)</div>
<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;          part_4 += <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (n_vot_2[i_cluster][j_class]) / <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (n_ftr[j_class]);</div>
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; </div>
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;      statistical_weights[i_class][i_cluster] = (1.0f / part_1) * (1.0f / part_2) * part_3 / part_4;</div>
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;    }</div>
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;  }<span class="comment">//next cluster</span></div>
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;}</div>
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; </div>
<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01123"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#aeab8318ded750cbf52cd272daeeeba98"> 1123</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#aeab8318ded750cbf52cd272daeeeba98">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::simplifyCloud</a> (</div>
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;  <span class="keyword">typename</span> pcl::PointCloud&lt;PointT&gt;::ConstPtr in_point_cloud,</div>
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;  <span class="keyword">typename</span> pcl::PointCloud&lt;NormalT&gt;::ConstPtr in_normal_cloud,</div>
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;  <span class="keyword">typename</span> pcl::PointCloud&lt;PointT&gt;::Ptr out_sampled_point_cloud,</div>
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;  <span class="keyword">typename</span> pcl::PointCloud&lt;NormalT&gt;::Ptr out_sampled_normal_cloud)</div>
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;{</div>
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;  <span class="comment">//create voxel grid</span></div>
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;  <a class="code" href="classpcl_1_1_voxel_grid.html">pcl::VoxelGrid&lt;PointT&gt;</a> grid;</div>
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;  grid.<a class="code" href="classpcl_1_1_voxel_grid.html#aa5d7831e665977bdce76ed05bd0005cf">setLeafSize</a> (sampling_size_, sampling_size_, sampling_size_);</div>
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;  grid.<a class="code" href="classpcl_1_1_voxel_grid.html#aabb07bacf03039f40d256b36ee2dd495">setSaveLeafLayout</a> (<span class="keyword">true</span>);</div>
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;  grid.<a class="code" href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">setInputCloud</a> (in_point_cloud);</div>
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; </div>
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;  <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointT&gt;</a> temp_cloud;</div>
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;  grid.<a class="code" href="classpcl_1_1_filter.html#a17115897ca28f6b12950d023958aa641">filter</a> (temp_cloud);</div>
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; </div>
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;  <span class="comment">//extract indices of points from source cloud which are closest to grid points</span></div>
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> max_value = std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; </div>
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">size_t</span> num_source_points = in_point_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ();</div>
<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">size_t</span> num_sample_points = temp_cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ();</div>
<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; </div>
<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;  std::vector&lt;float&gt; dist_to_grid_center (num_sample_points, max_value);</div>
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;  std::vector&lt;int&gt; sampling_indices (num_sample_points, -1);</div>
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; </div>
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i_point = 0; i_point &lt; num_source_points; i_point++)</div>
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;  {</div>
<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;    <span class="keywordtype">int</span> index = grid.<a class="code" href="classpcl_1_1_voxel_grid.html#a0b7ead02de1bfcce1100ff66cbc12998">getCentroidIndex</a> (in_point_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i_point]);</div>
<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;    <span class="keywordflow">if</span> (index == -1)</div>
<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;      <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; </div>
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;    <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> pt_1 = in_point_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[i_point];</div>
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;    <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> pt_2 = temp_cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[index];</div>
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; </div>
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;    <span class="keywordtype">float</span> distance = (pt_1.x - pt_2.x) * (pt_1.x - pt_2.x) + (pt_1.y - pt_2.y) * (pt_1.y - pt_2.y) + (pt_1.z - pt_2.z) * (pt_1.z - pt_2.z);</div>
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;    <span class="keywordflow">if</span> (distance &lt; dist_to_grid_center[index])</div>
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;    {</div>
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;      dist_to_grid_center[index] = distance;</div>
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;      sampling_indices[index] = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (i_point);</div>
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;    }</div>
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;  }</div>
<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; </div>
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;  <span class="comment">//extract source points</span></div>
<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;  pcl::PointIndices::Ptr final_inliers_indices (<span class="keyword">new</span> <a class="code" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> ());</div>
<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;  <a class="code" href="classpcl_1_1_extract_indices.html">pcl::ExtractIndices&lt;PointT&gt;</a> extract_points;</div>
<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;  <a class="code" href="classpcl_1_1_extract_indices.html">pcl::ExtractIndices&lt;NormalT&gt;</a> extract_normals;</div>
<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; </div>
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;  final_inliers_indices-&gt;indices.reserve (num_sample_points);</div>
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i_point = 0; i_point &lt; num_sample_points; i_point++)</div>
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;  {</div>
<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;    <span class="keywordflow">if</span> (sampling_indices[i_point] != -1)</div>
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;      final_inliers_indices-&gt;indices.push_back ( sampling_indices[i_point] );</div>
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;  }</div>
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; </div>
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;  extract_points.<a class="code" href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">setInputCloud</a> (in_point_cloud);</div>
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;  extract_points.<a class="code" href="classpcl_1_1_p_c_l_base.html#ab219359de6eb34c9d51e2e976dd1a0d1">setIndices</a> (final_inliers_indices);</div>
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;  extract_points.filter (*out_sampled_point_cloud);</div>
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; </div>
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;  extract_normals.<a class="code" href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">setInputCloud</a> (in_normal_cloud);</div>
<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;  extract_normals.<a class="code" href="classpcl_1_1_p_c_l_base.html#ab219359de6eb34c9d51e2e976dd1a0d1">setIndices</a> (final_inliers_indices);</div>
<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;  extract_normals.filter (*out_sampled_normal_cloud);</div>
<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;}</div>
<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; </div>
<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01187"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a56c5bfb3d5801c417ae72bd8f2f80316"> 1187</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a56c5bfb3d5801c417ae72bd8f2f80316">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::shiftCloud</a> (</div>
<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;  <span class="keyword">typename</span> pcl::PointCloud&lt;PointT&gt;::Ptr in_cloud,</div>
<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;  Eigen::Vector3f shift_point)</div>
<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;{</div>
<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;  <span class="keyword">typename</span> pcl::PointCloud&lt;PointT&gt;::iterator point_it;</div>
<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;  <span class="keywordflow">for</span> (point_it = in_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.begin (); point_it != in_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.end (); point_it++)</div>
<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;  {</div>
<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;    point_it-&gt;x -= shift_point.x ();</div>
<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;    point_it-&gt;y -= shift_point.y ();</div>
<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;    point_it-&gt;z -= shift_point.z ();</div>
<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;  }</div>
<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;}</div>
<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; </div>
<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; Eigen::Matrix3f</div>
<div class="line"><a name="l01202"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a1d9b74d62021c431e5519a0546b888c5"> 1202</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a1d9b74d62021c431e5519a0546b888c5">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::alignYCoordWithNormal</a> (<span class="keyword">const</span> <a class="code" href="structpcl_1_1_normal.html">NormalT</a>&amp; in_normal)</div>
<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;{</div>
<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;  Eigen::Matrix3f result;</div>
<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;  Eigen::Matrix3f rotation_matrix_X;</div>
<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;  Eigen::Matrix3f rotation_matrix_Z;</div>
<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; </div>
<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;  <span class="keywordtype">float</span> A = 0.0f;</div>
<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;  <span class="keywordtype">float</span> B = 0.0f;</div>
<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;  <span class="keywordtype">float</span> sign = -1.0f;</div>
<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; </div>
<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;  <span class="keywordtype">float</span> denom_X = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (sqrt (in_normal.normal_z * in_normal.normal_z + in_normal.normal_y * in_normal.normal_y));</div>
<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;  A = in_normal.normal_y / denom_X;</div>
<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;  B = sign * in_normal.normal_z / denom_X;</div>
<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;  rotation_matrix_X &lt;&lt; 1.0f,   0.0f,   0.0f,</div>
<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;                       0.0f,      A,     -B,</div>
<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;                       0.0f,      B,      A;</div>
<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; </div>
<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;  <span class="keywordtype">float</span> denom_Z = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (sqrt (in_normal.normal_x * in_normal.normal_x + in_normal.normal_y * in_normal.normal_y));</div>
<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;  A = in_normal.normal_y / denom_Z;</div>
<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;  B = sign * in_normal.normal_x / denom_Z;</div>
<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;  rotation_matrix_Z &lt;&lt;    A,     -B,   0.0f,</div>
<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;                          B,      A,   0.0f,</div>
<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;                       0.0f,   0.0f,   1.0f;</div>
<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; </div>
<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;  result = rotation_matrix_X * rotation_matrix_Z;</div>
<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; </div>
<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;  <span class="keywordflow">return</span> (result);</div>
<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;}</div>
<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; </div>
<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01233"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a1ba2c5aed4e6ca83a4c43e51c0f8b915"> 1233</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a1ba2c5aed4e6ca83a4c43e51c0f8b915">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::applyTransform</a> (Eigen::Vector3f&amp; io_vec, <span class="keyword">const</span> Eigen::Matrix3f&amp; in_transform)</div>
<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;{</div>
<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;  io_vec = in_transform * io_vec;</div>
<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;}</div>
<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; </div>
<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01240"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a95ecb201992f3fcc3b0df7f30d1db105"> 1240</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a95ecb201992f3fcc3b0df7f30d1db105">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::estimateFeatures</a> (</div>
<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;  <span class="keyword">typename</span> pcl::PointCloud&lt;PointT&gt;::Ptr sampled_point_cloud,</div>
<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;  <span class="keyword">typename</span> pcl::PointCloud&lt;NormalT&gt;::Ptr normal_cloud,</div>
<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;  <span class="keyword">typename</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt;<a class="code" href="structpcl_1_1_histogram.html">pcl::Histogram&lt;FeatureSize&gt;</a> &gt;::Ptr feature_cloud)</div>
<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;{</div>
<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;  <span class="keyword">typename</span> pcl::search::Search&lt;PointT&gt;::Ptr tree = boost::shared_ptr&lt;pcl::search::Search&lt;PointT&gt; &gt; (<span class="keyword">new</span> <a class="code" href="classpcl_1_1search_1_1_kd_tree.html">pcl::search::KdTree&lt;PointT&gt;</a>);</div>
<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;<span class="comment">//  tree-&gt;setInputCloud (point_cloud);</span></div>
<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; </div>
<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;  feature_estimator_-&gt;setInputCloud (sampled_point_cloud-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#afebbbb9c522a94cf245dd3968b50ed5e">makeShared</a> ());</div>
<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;<span class="comment">//  feature_estimator_-&gt;setSearchSurface (point_cloud-&gt;makeShared ());</span></div>
<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;  feature_estimator_-&gt;setSearchMethod (tree);</div>
<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; </div>
<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;<span class="comment">//  typename pcl::SpinImageEstimation&lt;pcl::PointXYZ, pcl::Normal, pcl::Histogram&lt;FeatureSize&gt; &gt;::Ptr feat_est_norm =</span></div>
<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;<span class="comment">//    boost::dynamic_pointer_cast&lt;pcl::SpinImageEstimation&lt;pcl::PointXYZ, pcl::Normal, pcl::Histogram&lt;FeatureSize&gt; &gt; &gt; (feature_estimator_);</span></div>
<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;<span class="comment">//  feat_est_norm-&gt;setInputNormals (normal_cloud);</span></div>
<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; </div>
<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;  <span class="keyword">typename</span> <a class="code" href="classpcl_1_1_feature_from_normals.html">pcl::FeatureFromNormals&lt;pcl::PointXYZ, pcl::Normal, pcl::Histogram&lt;FeatureSize&gt;</a> &gt;::Ptr feat_est_norm =</div>
<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;    boost::dynamic_pointer_cast&lt;pcl::FeatureFromNormals&lt;pcl::PointXYZ, pcl::Normal, pcl::Histogram&lt;FeatureSize&gt; &gt; &gt; (feature_estimator_);</div>
<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;  feat_est_norm-&gt;<a class="code" href="classpcl_1_1_feature_from_normals.html#a349685ac9deb723502de9f399d0286dc">setInputNormals</a> (normal_cloud);</div>
<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; </div>
<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;  feature_estimator_-&gt;compute (*feature_cloud);</div>
<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;}</div>
<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; </div>
<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">double</span></div>
<div class="line"><a name="l01265"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a6e7cc25fdb5957ffb10cc45cffdfc144"> 1265</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a6e7cc25fdb5957ffb10cc45cffdfc144">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::computeKMeansClustering</a> (</div>
<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;  <span class="keyword">const</span> Eigen::MatrixXf&amp; points_to_cluster,</div>
<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;  <span class="keywordtype">int</span> number_of_clusters,</div>
<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;  Eigen::MatrixXi&amp; io_labels,</div>
<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;  <a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a2110e36af289f3b172a1aecff09e300c">TermCriteria</a> criteria,</div>
<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160;  <span class="keywordtype">int</span> attempts,</div>
<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;  <span class="keywordtype">int</span> flags,</div>
<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;  Eigen::MatrixXf&amp; cluster_centers)</div>
<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;{</div>
<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> spp_trials = 3;</div>
<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;  <span class="keywordtype">size_t</span> number_of_points = points_to_cluster.rows () &gt; 1 ? points_to_cluster.rows () : points_to_cluster.cols ();</div>
<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;  <span class="keywordtype">int</span> feature_dimension = points_to_cluster.rows () &gt; 1 ? FeatureSize : 1;</div>
<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; </div>
<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;  attempts = std::max (attempts, 1);</div>
<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;  srand (<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (time (0)));</div>
<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; </div>
<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;  Eigen::MatrixXi labels (number_of_points, 1);</div>
<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; </div>
<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;  <span class="keywordflow">if</span> (flags &amp; USE_INITIAL_LABELS)</div>
<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;    labels = io_labels;</div>
<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;    labels.setZero ();</div>
<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; </div>
<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;  Eigen::MatrixXf centers (number_of_clusters, feature_dimension);</div>
<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;  Eigen::MatrixXf old_centers (number_of_clusters, feature_dimension);</div>
<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;  std::vector&lt;int&gt; counters (number_of_clusters);</div>
<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;  std::vector&lt;Eigen::Vector2f, Eigen::aligned_allocator&lt;Eigen::Vector2f&gt; &gt; boxes (feature_dimension);</div>
<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;  Eigen::Vector2f* box = &amp;boxes[0];</div>
<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; </div>
<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;  <span class="keywordtype">double</span> best_compactness = std::numeric_limits&lt;double&gt;::max ();</div>
<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;  <span class="keywordtype">double</span> compactness = 0.0;</div>
<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; </div>
<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;  <span class="keywordflow">if</span> (criteria.type_ &amp; TermCriteria::EPS)</div>
<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;    criteria.epsilon_ = std::max (criteria.epsilon_, 0.0f);</div>
<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;    criteria.epsilon_ = std::numeric_limits&lt;float&gt;::epsilon ();</div>
<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; </div>
<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;  criteria.epsilon_ *= criteria.epsilon_;</div>
<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; </div>
<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;  <span class="keywordflow">if</span> (criteria.type_ &amp; TermCriteria::COUNT)</div>
<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;    criteria.max_count_ = std::min (std::max (criteria.max_count_, 2), 100);</div>
<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;    criteria.max_count_ = 100;</div>
<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; </div>
<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;  <span class="keywordflow">if</span> (number_of_clusters == 1)</div>
<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;  {</div>
<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;    attempts = 1;</div>
<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;    criteria.max_count_ = 2;</div>
<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;  }</div>
<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; </div>
<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_dim = 0; i_dim &lt; feature_dimension; i_dim++)</div>
<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;    box[i_dim] = Eigen::Vector2f (points_to_cluster (0, i_dim), points_to_cluster (0, i_dim));</div>
<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; </div>
<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_point = 0; i_point &lt; number_of_points; i_point++)</div>
<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_dim = 0; i_dim &lt; feature_dimension; i_dim++)</div>
<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;    {</div>
<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;      <span class="keywordtype">float</span> v = points_to_cluster (i_point, i_dim);</div>
<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;      box[i_dim] (0) = std::min (box[i_dim] (0), v);</div>
<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;      box[i_dim] (1) = std::max (box[i_dim] (1), v);</div>
<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;    }</div>
<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; </div>
<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_attempt = 0; i_attempt &lt; attempts; i_attempt++)</div>
<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;  {</div>
<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;    <span class="keywordtype">float</span> max_center_shift = std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> iter = 0; iter &lt; criteria.max_count_ &amp;&amp; max_center_shift &gt; criteria.epsilon_; iter++)</div>
<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;    {</div>
<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;      Eigen::MatrixXf temp (centers.rows (), centers.cols ());</div>
<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;      temp = centers;</div>
<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;      centers = old_centers;</div>
<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;      old_centers = temp;</div>
<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; </div>
<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;      <span class="keywordflow">if</span> ( iter == 0 &amp;&amp; ( i_attempt &gt; 0 || !(flags &amp; USE_INITIAL_LABELS) ) )</div>
<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;      {</div>
<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;        <span class="keywordflow">if</span> (flags &amp; PP_CENTERS)</div>
<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;          generateCentersPP (points_to_cluster, centers, number_of_clusters, spp_trials);</div>
<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;        <span class="keywordflow">else</span></div>
<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;        {</div>
<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_cl_center = 0; i_cl_center &lt; number_of_clusters; i_cl_center++)</div>
<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;          {</div>
<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;            Eigen::VectorXf center (feature_dimension);</div>
<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;            generateRandomCenter (boxes, center);</div>
<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160;            <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_dim = 0; i_dim &lt; feature_dimension; i_dim++)</div>
<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160;              centers (i_cl_center, i_dim) = center (i_dim);</div>
<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;          }<span class="comment">//generate center for next cluster</span></div>
<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;        }<span class="comment">//end if-else random or PP centers</span></div>
<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160;      }</div>
<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;      <span class="keywordflow">else</span></div>
<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;      {</div>
<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;        centers.setZero ();</div>
<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_cluster = 0; i_cluster &lt; number_of_clusters; i_cluster++)</div>
<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;          counters[i_cluster] = 0;</div>
<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_point = 0; i_point &lt; number_of_points; i_point++)</div>
<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;        {</div>
<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;          <span class="keywordtype">int</span> i_label = labels (i_point, 0);</div>
<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_dim = 0; i_dim &lt; feature_dimension; i_dim++)</div>
<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;            centers (i_label, i_dim) += points_to_cluster (i_point, i_dim);</div>
<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;          counters[i_label]++;</div>
<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;        }</div>
<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;        <span class="keywordflow">if</span> (iter &gt; 0)</div>
<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;          max_center_shift = 0.0f;</div>
<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_cl_center = 0; i_cl_center &lt; number_of_clusters; i_cl_center++)</div>
<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;        {</div>
<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;          <span class="keywordflow">if</span> (counters[i_cl_center] != 0)</div>
<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;          {</div>
<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;            <span class="keywordtype">float</span> scale = 1.0f / <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (counters[i_cl_center]);</div>
<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;            <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_dim = 0; i_dim &lt; feature_dimension; i_dim++)</div>
<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;              centers (i_cl_center, i_dim) *= scale;</div>
<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;          }</div>
<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;          <span class="keywordflow">else</span></div>
<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;          {</div>
<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;            Eigen::VectorXf center (feature_dimension);</div>
<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;            generateRandomCenter (boxes, center);</div>
<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i_dim = 0; i_dim &lt; feature_dimension; i_dim++)</div>
<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;              centers (i_cl_center, i_dim) = center (i_dim);</div>
<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;          }</div>
<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; </div>
<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;          <span class="keywordflow">if</span> (iter &gt; 0)</div>
<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;          {</div>
<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;            <span class="keywordtype">float</span> dist = 0.0f;</div>
<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;            <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_dim = 0; i_dim &lt; feature_dimension; i_dim++)</div>
<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;            {</div>
<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;              <span class="keywordtype">float</span> diff = centers (i_cl_center, i_dim) - old_centers (i_cl_center, i_dim);</div>
<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;              dist += diff * diff;</div>
<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;            }</div>
<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;            max_center_shift = std::max (max_center_shift, dist);</div>
<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;          }</div>
<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160;        }</div>
<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;      }</div>
<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;      compactness = 0.0f;</div>
<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_point = 0; i_point &lt; number_of_points; i_point++)</div>
<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;      {</div>
<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;        Eigen::VectorXf sample (feature_dimension);</div>
<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;        sample = points_to_cluster.row (i_point);</div>
<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; </div>
<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;        <span class="keywordtype">int</span> k_best = 0;</div>
<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;        <span class="keywordtype">float</span> min_dist = std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; </div>
<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_cluster = 0; i_cluster &lt; number_of_clusters; i_cluster++)</div>
<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;        {</div>
<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;          Eigen::VectorXf center (feature_dimension);</div>
<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;          center = centers.row (i_cluster);</div>
<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;          <span class="keywordtype">float</span> dist = computeDistance (sample, center);</div>
<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;          <span class="keywordflow">if</span> (min_dist &gt; dist)</div>
<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;          {</div>
<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;            min_dist = dist;</div>
<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;            k_best = i_cluster;</div>
<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;          }</div>
<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;        }</div>
<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;        compactness += min_dist;</div>
<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;        labels (i_point, 0) = k_best;</div>
<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;      }</div>
<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160;    }<span class="comment">//next iteration</span></div>
<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; </div>
<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;    <span class="keywordflow">if</span> (compactness &lt; best_compactness)</div>
<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;    {</div>
<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;      best_compactness = compactness;</div>
<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;      cluster_centers = centers;</div>
<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;      io_labels = labels;</div>
<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;    }</div>
<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;  }<span class="comment">//next attempt</span></div>
<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; </div>
<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;  <span class="keywordflow">return</span> (best_compactness);</div>
<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;}</div>
<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; </div>
<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01431"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a6a0f8e46d933e4b93b320a2c9682db84"> 1431</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a6a0f8e46d933e4b93b320a2c9682db84">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::generateCentersPP</a> (</div>
<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;  <span class="keyword">const</span> Eigen::MatrixXf&amp; data,</div>
<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;  Eigen::MatrixXf&amp; out_centers,</div>
<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;  <span class="keywordtype">int</span> number_of_clusters,</div>
<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;  <span class="keywordtype">int</span> trials)</div>
<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;{</div>
<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;  <span class="keywordtype">size_t</span> dimension = data.cols ();</div>
<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> number_of_points = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (data.rows ());</div>
<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;  std::vector&lt;int&gt; centers_vec (number_of_clusters);</div>
<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;  <span class="keywordtype">int</span>* centers = &amp;centers_vec[0];</div>
<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;  std::vector&lt;double&gt; dist (number_of_points);</div>
<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;  std::vector&lt;double&gt; tdist (number_of_points);</div>
<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;  std::vector&lt;double&gt; tdist2 (number_of_points);</div>
<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;  <span class="keywordtype">double</span> sum0 = 0.0;</div>
<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; </div>
<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> random_unsigned = rand ();</div>
<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;  centers[0] = random_unsigned % number_of_points;</div>
<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; </div>
<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_point = 0; i_point &lt; number_of_points; i_point++)</div>
<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;  {</div>
<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;    Eigen::VectorXf first (dimension);</div>
<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;    Eigen::VectorXf second (dimension);</div>
<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;    first = data.row (i_point);</div>
<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;    second = data.row (centers[0]);</div>
<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;    dist[i_point] = computeDistance (first, second);</div>
<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;    sum0 += dist[i_point];</div>
<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;  }</div>
<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; </div>
<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_cluster = 0; i_cluster &lt; number_of_clusters; i_cluster++)</div>
<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;  {</div>
<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;    <span class="keywordtype">double</span> best_sum = std::numeric_limits&lt;double&gt;::max ();</div>
<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;    <span class="keywordtype">int</span> best_center = -1;</div>
<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_trials = 0; i_trials &lt; trials; i_trials++)</div>
<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;    {</div>
<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;      <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> random_integer = rand () - 1;</div>
<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;      <span class="keywordtype">double</span> random_double = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span> (random_integer) / <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span> (std::numeric_limits&lt;unsigned int&gt;::max ());</div>
<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;      <span class="keywordtype">double</span> p = random_double * sum0;</div>
<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; </div>
<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;      <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_point;</div>
<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;      <span class="keywordflow">for</span> (i_point = 0; i_point &lt; number_of_points - 1; i_point++)</div>
<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;        <span class="keywordflow">if</span> ( (p -= dist[i_point]) &lt;= 0.0)</div>
<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;          <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; </div>
<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;      <span class="keywordtype">int</span> ci = i_point;</div>
<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; </div>
<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;      <span class="keywordtype">double</span> s = 0.0;</div>
<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_point = 0; i_point &lt; number_of_points; i_point++)</div>
<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;      {</div>
<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;        Eigen::VectorXf first (dimension);</div>
<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;        Eigen::VectorXf second (dimension);</div>
<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;        first = data.row (i_point);</div>
<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;        second = data.row (ci);</div>
<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;        tdist2[i_point] = std::min (<span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span> (computeDistance (first, second)), dist[i_point]);</div>
<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;        s += tdist2[i_point];</div>
<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;      }</div>
<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; </div>
<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;      <span class="keywordflow">if</span> (s &lt;= best_sum)</div>
<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;      {</div>
<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;        best_sum = s;</div>
<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;        best_center = ci;</div>
<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;        std::swap (tdist, tdist2);</div>
<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;      }</div>
<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;    }</div>
<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; </div>
<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;    centers[i_cluster] = best_center;</div>
<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;    sum0 = best_sum;</div>
<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160;    std::swap (dist, tdist);</div>
<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;  }</div>
<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; </div>
<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i_cluster = 0; i_cluster &lt; number_of_clusters; i_cluster++)</div>
<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_dim = 0; i_dim &lt; dimension; i_dim++)</div>
<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;      out_centers (i_cluster, i_dim) = data (centers[i_cluster], i_dim);</div>
<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160;}</div>
<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160; </div>
<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01507"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a33688b88157c6d8b15290ed88646effb"> 1507</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a33688b88157c6d8b15290ed88646effb">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::generateRandomCenter</a> (<span class="keyword">const</span> std::vector&lt;Eigen::Vector2f, Eigen::aligned_allocator&lt;Eigen::Vector2f&gt; &gt;&amp; boxes,</div>
<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;  Eigen::VectorXf&amp; center)</div>
<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160;{</div>
<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;  <span class="keywordtype">size_t</span> dimension = boxes.size ();</div>
<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160;  <span class="keywordtype">float</span> margin = 1.0f / <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (dimension);</div>
<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; </div>
<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_dim = 0; i_dim &lt; dimension; i_dim++)</div>
<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;  {</div>
<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> random_integer = rand () - 1;</div>
<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160;    <span class="keywordtype">float</span> random_float = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (random_integer) / <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (std::numeric_limits&lt;unsigned int&gt;::max ());</div>
<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160;    center (i_dim) = (random_float * (1.0f + margin * 2.0f)- margin) * (boxes[i_dim] (1) - boxes[i_dim] (0)) + boxes[i_dim] (0);</div>
<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;  }</div>
<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;}</div>
<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; </div>
<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> FeatureSize, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>T, <span class="keyword">typename</span> NormalT&gt; <span class="keywordtype">float</span></div>
<div class="line"><a name="l01523"></a><span class="lineno"><a class="line" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a4f7f33ad9a8cec7886f8746b45165095"> 1523</a></span>&#160;<a class="code" href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a4f7f33ad9a8cec7886f8746b45165095">pcl::ism::ImplicitShapeModelEstimation&lt;FeatureSize, PointT, NormalT&gt;::computeDistance</a> (Eigen::VectorXf&amp; vec_1, Eigen::VectorXf&amp; vec_2)</div>
<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;{</div>
<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;  <span class="keywordtype">size_t</span> dimension = vec_1.rows () &gt; 1 ? vec_1.rows () : vec_1.cols ();</div>
<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;  <span class="keywordtype">float</span> distance = 0.0f;</div>
<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160;  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_dim = 0; i_dim &lt; dimension; i_dim++)</div>
<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;  {</div>
<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160;    <span class="keywordtype">float</span> diff = vec_1 (i_dim) - vec_2 (i_dim);</div>
<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;    distance += diff * diff;</div>
<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;  }</div>
<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; </div>
<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160;  <span class="keywordflow">return</span> (distance);</div>
<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160;}</div>
<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; </div>
<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;<span class="preprocessor">#endif </span><span class="comment">//#ifndef PCL_IMPLICIT_SHAPE_MODEL_HPP_</span></div>
<div class="ttc" id="aclasspcl_1_1_extract_indices_html"><div class="ttname"><a href="classpcl_1_1_extract_indices.html">pcl::ExtractIndices</a></div><div class="ttdoc">ExtractIndices extracts a set of indices from a point cloud.</div><div class="ttdef"><b>Definition:</b> extract_indices.h:71</div></div>
<div class="ttc" id="aclasspcl_1_1_feature_from_normals_html"><div class="ttname"><a href="classpcl_1_1_feature_from_normals.html">pcl::FeatureFromNormals</a></div><div class="ttdef"><b>Definition:</b> feature.h:311</div></div>
<div class="ttc" id="aclasspcl_1_1_feature_from_normals_html_a349685ac9deb723502de9f399d0286dc"><div class="ttname"><a href="classpcl_1_1_feature_from_normals.html#a349685ac9deb723502de9f399d0286dc">pcl::FeatureFromNormals::setInputNormals</a></div><div class="ttdeci">void setInputNormals(const PointCloudNConstPtr &amp;normals)</div><div class="ttdoc">Provide a pointer to the input dataset that contains the point normals of the XYZ dataset....</div><div class="ttdef"><b>Definition:</b> feature.h:344</div></div>
<div class="ttc" id="aclasspcl_1_1_feature_html"><div class="ttname"><a href="classpcl_1_1_feature.html">pcl::Feature</a></div><div class="ttdoc">Feature represents the base feature class. Some generic 3D operations that are applicable to all feat...</div><div class="ttdef"><b>Definition:</b> feature.h:106</div></div>
<div class="ttc" id="aclasspcl_1_1_filter_html_a17115897ca28f6b12950d023958aa641"><div class="ttname"><a href="classpcl_1_1_filter.html#a17115897ca28f6b12950d023958aa641">pcl::Filter::filter</a></div><div class="ttdeci">void filter(PointCloud &amp;output)</div><div class="ttdoc">Calls the filtering method and returns the filtered dataset in output.</div><div class="ttdef"><b>Definition:</b> filter.h:132</div></div>
<div class="ttc" id="aclasspcl_1_1_kd_tree_f_l_a_n_n_html"><div class="ttname"><a href="classpcl_1_1_kd_tree_f_l_a_n_n.html">pcl::KdTreeFLANN&lt; pcl::InterestPoint &gt;</a></div></div>
<div class="ttc" id="aclasspcl_1_1_p_c_l_base_html_a1952d7101f3942bac3b69ed55c1ca7ea"><div class="ttname"><a href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">pcl::PCLBase::setInputCloud</a></div><div class="ttdeci">virtual void setInputCloud(const PointCloudConstPtr &amp;cloud)</div><div class="ttdoc">Provide a pointer to the input dataset</div><div class="ttdef"><b>Definition:</b> pcl_base.hpp:66</div></div>
<div class="ttc" id="aclasspcl_1_1_p_c_l_base_html_ab219359de6eb34c9d51e2e976dd1a0d1"><div class="ttname"><a href="classpcl_1_1_p_c_l_base.html#ab219359de6eb34c9d51e2e976dd1a0d1">pcl::PCLBase::setIndices</a></div><div class="ttdeci">virtual void setIndices(const IndicesPtr &amp;indices)</div><div class="ttdoc">Provide a pointer to the vector of indices that represents the input data.</div><div class="ttdef"><b>Definition:</b> pcl_base.hpp:73</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html"><div class="ttname"><a href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a></div><div class="ttdoc">PointCloud represents the base class in PCL for storing collections of 3D points.</div><div class="ttdef"><b>Definition:</b> point_cloud.h:173</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a2185a6453f8ad905d7bdf7b45754a160"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">pcl::PointCloud::width</a></div><div class="ttdeci">uint32_t width</div><div class="ttdoc">The point cloud width (if organized as an image-structure).</div><div class="ttdef"><b>Definition:</b> point_cloud.h:413</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a4f34b45220c57f96607513ffad0d9582"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">pcl::PointCloud::height</a></div><div class="ttdeci">uint32_t height</div><div class="ttdoc">The point cloud height (if organized as an image-structure).</div><div class="ttdef"><b>Definition:</b> point_cloud.h:415</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_af16a62638198313b9c093127c492c884"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">pcl::PointCloud::points</a></div><div class="ttdeci">std::vector&lt; PointT, Eigen::aligned_allocator&lt; PointT &gt; &gt; points</div><div class="ttdoc">The point data.</div><div class="ttdef"><b>Definition:</b> point_cloud.h:410</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_afebbbb9c522a94cf245dd3968b50ed5e"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#afebbbb9c522a94cf245dd3968b50ed5e">pcl::PointCloud::makeShared</a></div><div class="ttdeci">Ptr makeShared() const</div><div class="ttdoc">Copy the cloud to the heap and return a smart pointer Note that deep copy is performed,...</div><div class="ttdef"><b>Definition:</b> point_cloud.h:588</div></div>
<div class="ttc" id="aclasspcl_1_1_voxel_grid_html"><div class="ttname"><a href="classpcl_1_1_voxel_grid.html">pcl::VoxelGrid</a></div><div class="ttdoc">VoxelGrid assembles a local 3D grid over a given PointCloud, and downsamples + filters the data.</div><div class="ttdef"><b>Definition:</b> voxel_grid.h:179</div></div>
<div class="ttc" id="aclasspcl_1_1_voxel_grid_html_a0b7ead02de1bfcce1100ff66cbc12998"><div class="ttname"><a href="classpcl_1_1_voxel_grid.html#a0b7ead02de1bfcce1100ff66cbc12998">pcl::VoxelGrid::getCentroidIndex</a></div><div class="ttdeci">int getCentroidIndex(const PointT &amp;p)</div><div class="ttdoc">Returns the index in the resulting downsampled cloud of the specified point.</div><div class="ttdef"><b>Definition:</b> voxel_grid.h:319</div></div>
<div class="ttc" id="aclasspcl_1_1_voxel_grid_html_aa5d7831e665977bdce76ed05bd0005cf"><div class="ttname"><a href="classpcl_1_1_voxel_grid.html#aa5d7831e665977bdce76ed05bd0005cf">pcl::VoxelGrid::setLeafSize</a></div><div class="ttdeci">void setLeafSize(const Eigen::Vector4f &amp;leaf_size)</div><div class="ttdoc">Set the voxel grid leaf size.</div><div class="ttdef"><b>Definition:</b> voxel_grid.h:223</div></div>
<div class="ttc" id="aclasspcl_1_1_voxel_grid_html_aabb07bacf03039f40d256b36ee2dd495"><div class="ttname"><a href="classpcl_1_1_voxel_grid.html#aabb07bacf03039f40d256b36ee2dd495">pcl::VoxelGrid::setSaveLeafLayout</a></div><div class="ttdeci">void setSaveLeafLayout(bool save_leaf_layout)</div><div class="ttdoc">Set to true if leaf layout information needs to be saved for later access.</div><div class="ttdef"><b>Definition:</b> voxel_grid.h:280</div></div>
<div class="ttc" id="aclasspcl_1_1features_1_1_i_s_m_vote_list_html"><div class="ttname"><a href="classpcl_1_1features_1_1_i_s_m_vote_list.html">pcl::features::ISMVoteList</a></div><div class="ttdoc">This class is used for storing, analyzing and manipulating votes obtained from ISM algorithm.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.h:78</div></div>
<div class="ttc" id="aclasspcl_1_1features_1_1_i_s_m_vote_list_html_a224bb7843bc1493b510b53884ac1b71c"><div class="ttname"><a href="classpcl_1_1features_1_1_i_s_m_vote_list.html#a224bb7843bc1493b510b53884ac1b71c">pcl::features::ISMVoteList::addVote</a></div><div class="ttdeci">void addVote(pcl::InterestPoint &amp;in_vote, const PointT &amp;vote_origin, int in_class)</div><div class="ttdoc">This method simply adds another vote to the list.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:73</div></div>
<div class="ttc" id="aclasspcl_1_1features_1_1_i_s_m_vote_list_html_a2b1a5eb2c233baa767d1eb8becae92c4"><div class="ttname"><a href="classpcl_1_1features_1_1_i_s_m_vote_list.html#a2b1a5eb2c233baa767d1eb8becae92c4">pcl::features::ISMVoteList::findStrongestPeaks</a></div><div class="ttdeci">void findStrongestPeaks(std::vector&lt; ISMPeak, Eigen::aligned_allocator&lt; ISMPeak &gt; &gt; &amp;out_peaks, int in_class_id, double in_non_maxima_radius, double in_sigma)</div><div class="ttdoc">This method finds the strongest peaks (points were density has most higher values)....</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:124</div></div>
<div class="ttc" id="aclasspcl_1_1features_1_1_i_s_m_vote_list_html_a8af69407ed99f978fc73b245d2540c6b"><div class="ttname"><a href="classpcl_1_1features_1_1_i_s_m_vote_list.html#a8af69407ed99f978fc73b245d2540c6b">pcl::features::ISMVoteList::getColoredCloud</a></div><div class="ttdeci">pcl::PointCloud&lt; pcl::PointXYZRGB &gt;::Ptr getColoredCloud(typename pcl::PointCloud&lt; PointT &gt;::Ptr cloud=0)</div><div class="ttdoc">Returns the colored cloud that consists of votes for center (blue points) and initial point cloud (if...</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:85</div></div>
<div class="ttc" id="aclasspcl_1_1features_1_1_i_s_m_vote_list_html_ab3c9ca4a2308c959ac5a0009be35f7a8"><div class="ttname"><a href="classpcl_1_1features_1_1_i_s_m_vote_list.html#ab3c9ca4a2308c959ac5a0009be35f7a8">pcl::features::ISMVoteList::getNumberOfVotes</a></div><div class="ttdeci">unsigned int getNumberOfVotes()</div><div class="ttdoc">This method simply returns the number of votes.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:293</div></div>
<div class="ttc" id="aclasspcl_1_1features_1_1_i_s_m_vote_list_html_ab49403392d4d4a0384c2a1c76d097b8b"><div class="ttname"><a href="classpcl_1_1features_1_1_i_s_m_vote_list.html#ab49403392d4d4a0384c2a1c76d097b8b">pcl::features::ISMVoteList::validateTree</a></div><div class="ttdeci">void validateTree()</div><div class="ttdoc">this method is simply setting up the search tree.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:226</div></div>
<div class="ttc" id="aclasspcl_1_1features_1_1_i_s_m_vote_list_html_ac284edd6499950c3eafe533608e5b132"><div class="ttname"><a href="classpcl_1_1features_1_1_i_s_m_vote_list.html#ac284edd6499950c3eafe533608e5b132">pcl::features::ISMVoteList::getDensityAtPoint</a></div><div class="ttdeci">double getDensityAtPoint(const PointT &amp;point, double sigma_dist)</div><div class="ttdoc">Returns the density at the specified point.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:268</div></div>
<div class="ttc" id="aclasspcl_1_1features_1_1_i_s_m_vote_list_html_aecd4e03778ec4df656e9a1b410ae905c"><div class="ttname"><a href="classpcl_1_1features_1_1_i_s_m_vote_list.html#aecd4e03778ec4df656e9a1b410ae905c">pcl::features::ISMVoteList::~ISMVoteList</a></div><div class="ttdeci">virtual ~ISMVoteList()</div><div class="ttdoc">virtual descriptor.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:61</div></div>
<div class="ttc" id="aclasspcl_1_1features_1_1_i_s_m_vote_list_html_aeefba7e2950f49b5923e4d76962c6f10"><div class="ttname"><a href="classpcl_1_1features_1_1_i_s_m_vote_list.html#aeefba7e2950f49b5923e4d76962c6f10">pcl::features::ISMVoteList::ISMVoteList</a></div><div class="ttdeci">ISMVoteList()</div><div class="ttdoc">Empty constructor with member variables initialization.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:48</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a0df7cc562e4e36d408c2738e67d1191f"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a0df7cc562e4e36d408c2738e67d1191f">pcl::ism::ImplicitShapeModelEstimation::trainISM</a></div><div class="ttdeci">bool trainISM(ISMModelPtr &amp;trained_model)</div><div class="ttdoc">This method performs training and forms a visual vocabulary. It returns a trained model that can be s...</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:700</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a16e7d9f66e627dc6e68206ffabb45c95"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a16e7d9f66e627dc6e68206ffabb45c95">pcl::ism::ImplicitShapeModelEstimation::findObjects</a></div><div class="ttdeci">boost::shared_ptr&lt; pcl::features::ISMVoteList&lt; PointT &gt; &gt; findObjects(ISMModelPtr model, typename pcl::PointCloud&lt; PointT &gt;::Ptr in_cloud, typename pcl::PointCloud&lt; Normal &gt;::Ptr in_normals, int in_class_of_interest)</div><div class="ttdoc">This function is searching for the class of interest in a given cloud and returns the list of votes.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:754</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a1ba2c5aed4e6ca83a4c43e51c0f8b915"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a1ba2c5aed4e6ca83a4c43e51c0f8b915">pcl::ism::ImplicitShapeModelEstimation::applyTransform</a></div><div class="ttdeci">void applyTransform(Eigen::Vector3f &amp;io_vec, const Eigen::Matrix3f &amp;in_transform)</div><div class="ttdoc">This method applies transform set in in_transform to vector io_vector.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:1233</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a1d9b74d62021c431e5519a0546b888c5"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a1d9b74d62021c431e5519a0546b888c5">pcl::ism::ImplicitShapeModelEstimation::alignYCoordWithNormal</a></div><div class="ttdeci">Eigen::Matrix3f alignYCoordWithNormal(const NormalT &amp;in_normal)</div><div class="ttdoc">This method simply computes the rotation matrix, so that the given normal would match the Y axis afte...</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:1202</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a2110e36af289f3b172a1aecff09e300c"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a2110e36af289f3b172a1aecff09e300c">pcl::ism::ImplicitShapeModelEstimation::TermCriteria</a></div><div class="ttdeci">struct PCL_EXPORTS pcl::ism::ImplicitShapeModelEstimation::TC TermCriteria</div><div class="ttdoc">This structure is used for determining the end of the k-means clustering process.</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a2cfd927e2f6297db673dcc5b96cdc1b4"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a2cfd927e2f6297db673dcc5b96cdc1b4">pcl::ism::ImplicitShapeModelEstimation::getTrainingClouds</a></div><div class="ttdeci">std::vector&lt; typename pcl::PointCloud&lt; PointT &gt;::Ptr &gt; getTrainingClouds()</div><div class="ttdoc">This method simply returns the clouds that were set as the training clouds.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:575</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a33688b88157c6d8b15290ed88646effb"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a33688b88157c6d8b15290ed88646effb">pcl::ism::ImplicitShapeModelEstimation::generateRandomCenter</a></div><div class="ttdeci">void generateRandomCenter(const std::vector&lt; Eigen::Vector2f, Eigen::aligned_allocator&lt; Eigen::Vector2f &gt; &gt; &amp;boxes, Eigen::VectorXf &amp;center)</div><div class="ttdoc">Generates random center for cluster.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:1507</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a43e42d336b600c4d6e7d8b9665d16c86"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a43e42d336b600c4d6e7d8b9665d16c86">pcl::ism::ImplicitShapeModelEstimation::setTrainingClouds</a></div><div class="ttdeci">void setTrainingClouds(const std::vector&lt; typename pcl::PointCloud&lt; PointT &gt;::Ptr &gt; &amp;training_clouds)</div><div class="ttdoc">Allows to set clouds for training the ISM model.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:582</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a4a5c99e74ddf4ae9bc3caa3575b6ca11"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a4a5c99e74ddf4ae9bc3caa3575b6ca11">pcl::ism::ImplicitShapeModelEstimation::setNVotState</a></div><div class="ttdeci">void setNVotState(bool state)</div><div class="ttdoc">Changes the state of the Nvot coeff from [Knopp et al., 2010, (4)].</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:693</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a4f7f33ad9a8cec7886f8746b45165095"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a4f7f33ad9a8cec7886f8746b45165095">pcl::ism::ImplicitShapeModelEstimation::computeDistance</a></div><div class="ttdeci">float computeDistance(Eigen::VectorXf &amp;vec_1, Eigen::VectorXf &amp;vec_2)</div><div class="ttdoc">Computes the square distance beetween two vectors.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:1523</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a54ebf011063ef77084762d3f2b08a513"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a54ebf011063ef77084762d3f2b08a513">pcl::ism::ImplicitShapeModelEstimation::~ImplicitShapeModelEstimation</a></div><div class="ttdeci">virtual ~ImplicitShapeModelEstimation()</div><div class="ttdoc">Simple destructor.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:564</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a56c5bfb3d5801c417ae72bd8f2f80316"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a56c5bfb3d5801c417ae72bd8f2f80316">pcl::ism::ImplicitShapeModelEstimation::shiftCloud</a></div><div class="ttdeci">void shiftCloud(typename pcl::PointCloud&lt; PointT &gt;::Ptr in_cloud, Eigen::Vector3f shift_point)</div><div class="ttdoc">This method simply shifts the clouds points relative to the passed point.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:1187</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a5b8561475b8dcf05c214fdaa3d786918"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a5b8561475b8dcf05c214fdaa3d786918">pcl::ism::ImplicitShapeModelEstimation::getNVotState</a></div><div class="ttdeci">bool getNVotState()</div><div class="ttdoc">Returns the state of Nvot coeff from [Knopp et al., 2010, (4)], if set to false then coeff is taken a...</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:686</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a5c310cb89a7be4b388bea1526111a525"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a5c310cb89a7be4b388bea1526111a525">pcl::ism::ImplicitShapeModelEstimation::setTrainingNormals</a></div><div class="ttdeci">void setTrainingNormals(const std::vector&lt; typename pcl::PointCloud&lt; NormalT &gt;::Ptr &gt; &amp;training_normals)</div><div class="ttdoc">Allows to set normals for the training clouds that were passed through setTrainingClouds method.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:615</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a6a0f8e46d933e4b93b320a2c9682db84"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a6a0f8e46d933e4b93b320a2c9682db84">pcl::ism::ImplicitShapeModelEstimation::generateCentersPP</a></div><div class="ttdeci">void generateCentersPP(const Eigen::MatrixXf &amp;data, Eigen::MatrixXf &amp;out_centers, int number_of_clusters, int trials)</div><div class="ttdoc">Generates centers for clusters as described in Arthur, David and Sergei Vassilvitski (2007) k-means++...</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:1431</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a6dfe939775dc97b5a076c815a4d5bdac"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a6dfe939775dc97b5a076c815a4d5bdac">pcl::ism::ImplicitShapeModelEstimation::ImplicitShapeModelEstimation</a></div><div class="ttdeci">ImplicitShapeModelEstimation()</div><div class="ttdoc">Simple constructor that initializes everything.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:550</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a6e7cc25fdb5957ffb10cc45cffdfc144"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a6e7cc25fdb5957ffb10cc45cffdfc144">pcl::ism::ImplicitShapeModelEstimation::computeKMeansClustering</a></div><div class="ttdeci">double computeKMeansClustering(const Eigen::MatrixXf &amp;points_to_cluster, int number_of_clusters, Eigen::MatrixXi &amp;io_labels, TermCriteria criteria, int attempts, int flags, Eigen::MatrixXf &amp;cluster_centers)</div><div class="ttdoc">Performs K-means clustering.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:1265</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a82f839cf09e9db845af7659cb66a6fe0"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a82f839cf09e9db845af7659cb66a6fe0">pcl::ism::ImplicitShapeModelEstimation::getTrainingClasses</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; getTrainingClasses()</div><div class="ttdoc">Returns the array of classes that indicates which class the corresponding training cloud belongs.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:592</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a833845333ec925a77af5b963953ee37d"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a833845333ec925a77af5b963953ee37d">pcl::ism::ImplicitShapeModelEstimation::calculateWeights</a></div><div class="ttdeci">void calculateWeights(const std::vector&lt; LocationInfo, Eigen::aligned_allocator&lt; LocationInfo &gt; &gt; &amp;locations, const Eigen::MatrixXi &amp;labels, std::vector&lt; float &gt; &amp;sigmas, std::vector&lt; std::vector&lt; unsigned int &gt; &gt; &amp;clusters, std::vector&lt; std::vector&lt; float &gt; &gt; &amp;statistical_weights, std::vector&lt; float &gt; &amp;learned_weights)</div><div class="ttdoc">This function forms a visual vocabulary and evaluates weights described in [Knopp et al....</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:993</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_a95ecb201992f3fcc3b0df7f30d1db105"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#a95ecb201992f3fcc3b0df7f30d1db105">pcl::ism::ImplicitShapeModelEstimation::estimateFeatures</a></div><div class="ttdeci">void estimateFeatures(typename pcl::PointCloud&lt; PointT &gt;::Ptr sampled_point_cloud, typename pcl::PointCloud&lt; NormalT &gt;::Ptr normal_cloud, typename pcl::PointCloud&lt; pcl::Histogram&lt; FeatureSize &gt; &gt;::Ptr feature_cloud)</div><div class="ttdoc">This method estimates features for the given point cloud.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:1240</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_aada2c42e9685032c4cd2beb2a29b157c"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#aada2c42e9685032c4cd2beb2a29b157c">pcl::ism::ImplicitShapeModelEstimation::extractDescriptors</a></div><div class="ttdeci">bool extractDescriptors(std::vector&lt; pcl::Histogram&lt; FeatureSize &gt; &gt; &amp;histograms, std::vector&lt; LocationInfo, Eigen::aligned_allocator&lt; LocationInfo &gt; &gt; &amp;locations)</div><div class="ttdoc">Extracts the descriptors from the input clouds.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:849</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_aaf734e2f3120bb043404596956f01f6c"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#aaf734e2f3120bb043404596956f01f6c">pcl::ism::ImplicitShapeModelEstimation::setFeatureEstimator</a></div><div class="ttdeci">void setFeatureEstimator(boost::shared_ptr&lt; pcl::Feature&lt; PointT, pcl::Histogram&lt; FeatureSize &gt; &gt; &gt; feature)</div><div class="ttdoc">Changes the feature estimator.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:647</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_ab4cf537c4ecdbd38cdaa92bbefd2654d"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#ab4cf537c4ecdbd38cdaa92bbefd2654d">pcl::ism::ImplicitShapeModelEstimation::getNumberOfClusters</a></div><div class="ttdeci">unsigned int getNumberOfClusters()</div><div class="ttdoc">Returns the number of clusters used for descriptor clustering.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:655</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_ab5390e2ac51390339be681e644a1bdc9"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#ab5390e2ac51390339be681e644a1bdc9">pcl::ism::ImplicitShapeModelEstimation::calculateSigmas</a></div><div class="ttdeci">void calculateSigmas(std::vector&lt; float &gt; &amp;sigmas)</div><div class="ttdoc">This method calculates the value of sigma used for calculating the learned weights for every single c...</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:942</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_ac0b8072d7f6048c714854202bf00790a"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#ac0b8072d7f6048c714854202bf00790a">pcl::ism::ImplicitShapeModelEstimation::setNumberOfClusters</a></div><div class="ttdeci">void setNumberOfClusters(unsigned int num_of_clusters)</div><div class="ttdoc">Changes the number of clusters.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:662</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_aca084efb9d923b8963ae18c4b3550564"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#aca084efb9d923b8963ae18c4b3550564">pcl::ism::ImplicitShapeModelEstimation::getFeatureEstimator</a></div><div class="ttdeci">boost::shared_ptr&lt; pcl::Feature&lt; PointT, pcl::Histogram&lt; FeatureSize &gt; &gt; &gt; getFeatureEstimator()</div><div class="ttdoc">Returns the current feature estimator used for extraction of the descriptors.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:640</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_accdd4bb97e49ade2295cd49f59e78eba"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#accdd4bb97e49ade2295cd49f59e78eba">pcl::ism::ImplicitShapeModelEstimation::clusterDescriptors</a></div><div class="ttdeci">bool clusterDescriptors(std::vector&lt; pcl::Histogram&lt; FeatureSize &gt; &gt; &amp;histograms, Eigen::MatrixXi &amp;labels, Eigen::MatrixXf &amp;clusters_centers)</div><div class="ttdoc">This method performs descriptor clustering.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:916</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_acddaa58ec2977624f87a24e5432d831e"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#acddaa58ec2977624f87a24e5432d831e">pcl::ism::ImplicitShapeModelEstimation::getSigmaDists</a></div><div class="ttdeci">std::vector&lt; float &gt; getSigmaDists()</div><div class="ttdoc">Returns the array of sigma values.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:670</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_ae01b18529098566b7244f16ccf864cf1"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#ae01b18529098566b7244f16ccf864cf1">pcl::ism::ImplicitShapeModelEstimation::setSamplingSize</a></div><div class="ttdeci">void setSamplingSize(float sampling_size)</div><div class="ttdoc">Changes the sampling size used for cloud simplification.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:632</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_aeab8318ded750cbf52cd272daeeeba98"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#aeab8318ded750cbf52cd272daeeeba98">pcl::ism::ImplicitShapeModelEstimation::simplifyCloud</a></div><div class="ttdeci">void simplifyCloud(typename pcl::PointCloud&lt; PointT &gt;::ConstPtr in_point_cloud, typename pcl::PointCloud&lt; NormalT &gt;::ConstPtr in_normal_cloud, typename pcl::PointCloud&lt; PointT &gt;::Ptr out_sampled_point_cloud, typename pcl::PointCloud&lt; NormalT &gt;::Ptr out_sampled_normal_cloud)</div><div class="ttdoc">Simplifies the cloud using voxel grid principles.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:1123</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_af8eb194807519f620f01decec6dcd8a7"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#af8eb194807519f620f01decec6dcd8a7">pcl::ism::ImplicitShapeModelEstimation::setSigmaDists</a></div><div class="ttdeci">void setSigmaDists(const std::vector&lt; float &gt; &amp;training_sigmas)</div><div class="ttdoc">This method allows to set the value of sigma used for calculating the learned weights for every singl...</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:677</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_af932b3a78637dc245cda7ea03d45e9e8"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#af932b3a78637dc245cda7ea03d45e9e8">pcl::ism::ImplicitShapeModelEstimation::getTrainingNormals</a></div><div class="ttdeci">std::vector&lt; typename pcl::PointCloud&lt; NormalT &gt;::Ptr &gt; getTrainingNormals()</div><div class="ttdoc">This method returns the coresponding cloud of normals for every training point cloud.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:608</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_afa36d00337ee0a1adfc2b566fc46e9d7"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#afa36d00337ee0a1adfc2b566fc46e9d7">pcl::ism::ImplicitShapeModelEstimation::setTrainingClasses</a></div><div class="ttdeci">void setTrainingClasses(const std::vector&lt; unsigned int &gt; &amp;training_classes)</div><div class="ttdoc">Allows to set the class labels for the corresponding training clouds.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:599</div></div>
<div class="ttc" id="aclasspcl_1_1ism_1_1_implicit_shape_model_estimation_html_afd2eea3c7f85613e9b80bf5b8f822577"><div class="ttname"><a href="classpcl_1_1ism_1_1_implicit_shape_model_estimation.html#afd2eea3c7f85613e9b80bf5b8f822577">pcl::ism::ImplicitShapeModelEstimation::getSamplingSize</a></div><div class="ttdeci">float getSamplingSize()</div><div class="ttdoc">Returns the sampling size used for cloud simplification.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:625</div></div>
<div class="ttc" id="aclasspcl_1_1kernel_html"><div class="ttname"><a href="classpcl_1_1kernel.html">pcl::kernel</a></div><div class="ttdef"><b>Definition:</b> kernel.h:46</div></div>
<div class="ttc" id="aclasspcl_1_1search_1_1_kd_tree_html"><div class="ttname"><a href="classpcl_1_1search_1_1_kd_tree.html">pcl::search::KdTree</a></div><div class="ttdoc">search::KdTree is a wrapper class which inherits the pcl::KdTree class for performing search function...</div><div class="ttdef"><b>Definition:</b> kdtree.h:63</div></div>
<div class="ttc" id="astructpcl_1_1_histogram_html"><div class="ttname"><a href="structpcl_1_1_histogram.html">pcl::Histogram</a></div><div class="ttdoc">A point structure representing an N-D histogram.</div><div class="ttdef"><b>Definition:</b> point_types.hpp:1475</div></div>
<div class="ttc" id="astructpcl_1_1_i_s_m_peak_html"><div class="ttname"><a href="structpcl_1_1_i_s_m_peak.html">pcl::ISMPeak</a></div><div class="ttdoc">This struct is used for storing peak.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.h:59</div></div>
<div class="ttc" id="astructpcl_1_1_i_s_m_peak_html_ab396d6f73ad331b39585bc37f481230b"><div class="ttname"><a href="structpcl_1_1_i_s_m_peak.html#ab396d6f73ad331b39585bc37f481230b">pcl::ISMPeak::density</a></div><div class="ttdeci">double density</div><div class="ttdoc">Density of this peak.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.h:64</div></div>
<div class="ttc" id="astructpcl_1_1_i_s_m_peak_html_ab5ade3a0df41fe9043dd86751a17dbf9"><div class="ttname"><a href="structpcl_1_1_i_s_m_peak.html#ab5ade3a0df41fe9043dd86751a17dbf9">pcl::ISMPeak::class_id</a></div><div class="ttdeci">int class_id</div><div class="ttdoc">Determines which class this peak belongs.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.h:67</div></div>
<div class="ttc" id="astructpcl_1_1_interest_point_html"><div class="ttname"><a href="structpcl_1_1_interest_point.html">pcl::InterestPoint</a></div><div class="ttdoc">A point structure representing an interest point with Euclidean xyz coordinates, and an interest valu...</div><div class="ttdef"><b>Definition:</b> point_types.hpp:745</div></div>
<div class="ttc" id="astructpcl_1_1_normal_html"><div class="ttname"><a href="structpcl_1_1_normal.html">pcl::Normal</a></div><div class="ttdoc">A point structure representing normal coordinates and the surface curvature estimate....</div><div class="ttdef"><b>Definition:</b> point_types.hpp:779</div></div>
<div class="ttc" id="astructpcl_1_1_point_indices_html"><div class="ttname"><a href="structpcl_1_1_point_indices.html">pcl::PointIndices</a></div><div class="ttdef"><b>Definition:</b> PointIndices.h:13</div></div>
<div class="ttc" id="astructpcl_1_1_point_x_y_z_html"><div class="ttname"><a href="structpcl_1_1_point_x_y_z.html">pcl::PointXYZ</a></div><div class="ttdoc">A point structure representing Euclidean xyz coordinates. (SSE friendly)</div><div class="ttdef"><b>Definition:</b> point_types.hpp:282</div></div>
<div class="ttc" id="astructpcl_1_1_point_x_y_z_r_g_b_a_html"><div class="ttname"><a href="structpcl_1_1_point_x_y_z_r_g_b_a.html">pcl::PointXYZRGBA</a></div><div class="ttdoc">A point structure representing Euclidean xyz coordinates, and the RGBA color.</div><div class="ttdef"><b>Definition:</b> point_types.hpp:540</div></div>
<div class="ttc" id="astructpcl_1_1_point_x_y_z_r_g_b_html"><div class="ttname"><a href="structpcl_1_1_point_x_y_z_r_g_b.html">pcl::PointXYZRGB</a></div><div class="ttdoc">A point structure representing Euclidean xyz coordinates, and the RGB color.</div><div class="ttdef"><b>Definition:</b> point_types.hpp:607</div></div>
<div class="ttc" id="astructpcl_1_1features_1_1_i_s_m_model_html"><div class="ttname"><a href="structpcl_1_1features_1_1_i_s_m_model.html">pcl::features::ISMModel</a></div><div class="ttdoc">The assignment of this structure is to store the statistical/learned weights and other information of...</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.h:160</div></div>
<div class="ttc" id="astructpcl_1_1features_1_1_i_s_m_model_html_a0a607d64662e2f19fbe3a8d79234ead0"><div class="ttname"><a href="structpcl_1_1features_1_1_i_s_m_model.html#a0a607d64662e2f19fbe3a8d79234ead0">pcl::features::ISMModel::number_of_clusters_</a></div><div class="ttdeci">unsigned int number_of_clusters_</div><div class="ttdoc">Stores the number of clusters.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.h:218</div></div>
<div class="ttc" id="astructpcl_1_1features_1_1_i_s_m_model_html_a57fea44012b62bb62e7e019331c1109e"><div class="ttname"><a href="structpcl_1_1features_1_1_i_s_m_model.html#a57fea44012b62bb62e7e019331c1109e">pcl::features::ISMModel::clusters_centers_</a></div><div class="ttdeci">Eigen::MatrixXf clusters_centers_</div><div class="ttdoc">Stores the centers of the clusters that were obtained during the visual words clusterization.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.h:206</div></div>
<div class="ttc" id="astructpcl_1_1features_1_1_i_s_m_model_html_a5bacc0d9fd7c6decfc8f962aa49197b4"><div class="ttname"><a href="structpcl_1_1features_1_1_i_s_m_model.html#a5bacc0d9fd7c6decfc8f962aa49197b4">pcl::features::ISMModel::ISMModel</a></div><div class="ttdeci">ISMModel()</div><div class="ttdoc">Simple constructor that initializes the structure.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:299</div></div>
<div class="ttc" id="astructpcl_1_1features_1_1_i_s_m_model_html_a7752d924c5d4a19ec3d584e52881bb3c"><div class="ttname"><a href="structpcl_1_1features_1_1_i_s_m_model.html#a7752d924c5d4a19ec3d584e52881bb3c">pcl::features::ISMModel::loadModelFromfile</a></div><div class="ttdeci">bool loadModelFromfile(std::string &amp;file_name)</div><div class="ttdoc">This method loads the trained model from file.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:417</div></div>
<div class="ttc" id="astructpcl_1_1features_1_1_i_s_m_model_html_a77926537bb0ecf955dae2500f425d76d"><div class="ttname"><a href="structpcl_1_1features_1_1_i_s_m_model.html#a77926537bb0ecf955dae2500f425d76d">pcl::features::ISMModel::operator=</a></div><div class="ttdeci">ISMModel &amp; operator=(const ISMModel &amp;other)</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:505</div></div>
<div class="ttc" id="astructpcl_1_1features_1_1_i_s_m_model_html_a8357d8182720f7cfdcc9ec53d9be8a3b"><div class="ttname"><a href="structpcl_1_1features_1_1_i_s_m_model.html#a8357d8182720f7cfdcc9ec53d9be8a3b">pcl::features::ISMModel::~ISMModel</a></div><div class="ttdeci">virtual ~ISMModel()</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:355</div></div>
<div class="ttc" id="astructpcl_1_1features_1_1_i_s_m_model_html_a842174ec75a4ffeb634adef848e7dc40"><div class="ttname"><a href="structpcl_1_1features_1_1_i_s_m_model.html#a842174ec75a4ffeb634adef848e7dc40">pcl::features::ISMModel::descriptors_dimension_</a></div><div class="ttdeci">unsigned int descriptors_dimension_</div><div class="ttdoc">Stores descriptors dimension.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.h:221</div></div>
<div class="ttc" id="astructpcl_1_1features_1_1_i_s_m_model_html_a8a2bbee7dcf135ce59b3d219c381cc94"><div class="ttname"><a href="structpcl_1_1features_1_1_i_s_m_model.html#a8a2bbee7dcf135ce59b3d219c381cc94">pcl::features::ISMModel::sigmas_</a></div><div class="ttdeci">std::vector&lt; float &gt; sigmas_</div><div class="ttdoc">Stores the sigma value for each class. This values were used to compute the learned weights.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.h:200</div></div>
<div class="ttc" id="astructpcl_1_1features_1_1_i_s_m_model_html_a8e515449f74b5e1b651ac1019e9be335"><div class="ttname"><a href="structpcl_1_1features_1_1_i_s_m_model.html#a8e515449f74b5e1b651ac1019e9be335">pcl::features::ISMModel::learned_weights_</a></div><div class="ttdeci">std::vector&lt; float &gt; learned_weights_</div><div class="ttdoc">Stores learned weights.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.h:194</div></div>
<div class="ttc" id="astructpcl_1_1features_1_1_i_s_m_model_html_a90511c58d2784cdaca51e42f920ebeae"><div class="ttname"><a href="structpcl_1_1features_1_1_i_s_m_model.html#a90511c58d2784cdaca51e42f920ebeae">pcl::features::ISMModel::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdoc">this method resets all variables and frees memory.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:488</div></div>
<div class="ttc" id="astructpcl_1_1features_1_1_i_s_m_model_html_aaa1bbfa2a5745f94abc2e29de49d0e15"><div class="ttname"><a href="structpcl_1_1features_1_1_i_s_m_model.html#aaa1bbfa2a5745f94abc2e29de49d0e15">pcl::features::ISMModel::saveModelToFile</a></div><div class="ttdeci">bool saveModelToFile(std::string &amp;file_name)</div><div class="ttdoc">This method simply saves the trained model for later usage.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.hpp:362</div></div>
<div class="ttc" id="astructpcl_1_1features_1_1_i_s_m_model_html_aab08d3d3c4df77ee8f86c77cd28b801e"><div class="ttname"><a href="structpcl_1_1features_1_1_i_s_m_model.html#aab08d3d3c4df77ee8f86c77cd28b801e">pcl::features::ISMModel::classes_</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; classes_</div><div class="ttdoc">Stores the class label for every direction.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.h:197</div></div>
<div class="ttc" id="astructpcl_1_1features_1_1_i_s_m_model_html_ad4a191c684756c11afdbb49ad0f8c704"><div class="ttname"><a href="structpcl_1_1features_1_1_i_s_m_model.html#ad4a191c684756c11afdbb49ad0f8c704">pcl::features::ISMModel::directions_to_center_</a></div><div class="ttdeci">Eigen::MatrixXf directions_to_center_</div><div class="ttdoc">Stores the directions to objects center for each visual word.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.h:203</div></div>
<div class="ttc" id="astructpcl_1_1features_1_1_i_s_m_model_html_ad7a14d1495e3cf56f04b68d901622fa9"><div class="ttname"><a href="structpcl_1_1features_1_1_i_s_m_model.html#ad7a14d1495e3cf56f04b68d901622fa9">pcl::features::ISMModel::number_of_classes_</a></div><div class="ttdeci">unsigned int number_of_classes_</div><div class="ttdoc">Stores the number of classes.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.h:212</div></div>
<div class="ttc" id="astructpcl_1_1features_1_1_i_s_m_model_html_adb5f36818b76fbcb57e36e0ce876bda0"><div class="ttname"><a href="structpcl_1_1features_1_1_i_s_m_model.html#adb5f36818b76fbcb57e36e0ce876bda0">pcl::features::ISMModel::statistical_weights_</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; float &gt; &gt; statistical_weights_</div><div class="ttdoc">Stores statistical weights.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.h:191</div></div>
<div class="ttc" id="astructpcl_1_1features_1_1_i_s_m_model_html_ae35476b0343c107a91925e6e81e7818c"><div class="ttname"><a href="structpcl_1_1features_1_1_i_s_m_model.html#ae35476b0343c107a91925e6e81e7818c">pcl::features::ISMModel::number_of_visual_words_</a></div><div class="ttdeci">unsigned int number_of_visual_words_</div><div class="ttdoc">Stores the number of visual words.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.h:215</div></div>
<div class="ttc" id="astructpcl_1_1ism_1_1_implicit_shape_model_estimation_1_1_location_info_html"><div class="ttname"><a href="structpcl_1_1ism_1_1_implicit_shape_model_estimation_1_1_location_info.html">pcl::ism::ImplicitShapeModelEstimation::LocationInfo</a></div><div class="ttdoc">This structure stores the information about the keypoint.</div><div class="ttdef"><b>Definition:</b> implicit_shape_model.h:251</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_5443dc39785d12144f0f708ef47f23c0.html">recognition</a></li><li class="navelem"><a class="el" href="dir_c58fa9eb52df620dd2c4bc6c0be0f1ed.html">include</a></li><li class="navelem"><a class="el" href="dir_506f4b5c21e68a1f0cdcd8f359404a1f.html">pcl</a></li><li class="navelem"><a class="el" href="dir_e84f9d06135eb4af4fdb57ef4c0340ad.html">recognition</a></li><li class="navelem"><a class="el" href="dir_089a85571c39881cb62ab17afc5db173.html">impl</a></li><li class="navelem"><b>implicit_shape_model.hpp</b></li>
    <li class="footer">制作者 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
  </ul>
</div>
</body>
</html>
